首頁  >  文章  >  後端開發  >  從 Go 開啟 pfring:pfring NewRing 錯誤:沒有這樣的設備

從 Go 開啟 pfring:pfring NewRing 錯誤:沒有這樣的設備

王林
王林轉載
2024-02-10 17:30:09420瀏覽

从 Go 打开 pfring:pfring NewRing 错误:没有这样的设备

在進行網路程式設計時,我們常常會遇到一些錯誤和異常情況。其中,從Go語言開啟pfring函式庫時出現的"pfring NewRing 錯誤:沒有這樣的裝置"問題是一個常見的困擾開發者的錯誤。 php小編子墨將為大家解析這個錯誤的原因和解決方法,幫助大家順利解決這個問題。

問題內容

我想使用github.com/google/gopacket/pfring 套件從go 程式碼中呼叫pf_ring,但無法使其在debian 11 上運行(我的程式碼在debian 10 上運行)。

這是我的 go 程式碼:

package main

import (
    "github.com/google/gopacket/pfring"
    "log"
)

func main() {
    _, err := pfring.newring("eno1@0", 1574, pfring.flagpromisc|pfring.flag(1<<14))
    if err == nil {
        log.printf("success!")
        return
    }
    log.fatalf("failure: %s", err)
}

當我運行它時:

# ./test-go 
2023/01/24 10:12:25 failure: pfring newring error: no such device

顯然eno1介面是存在的:

# pf_ringcfg --list-interfaces
name: eno1                 driver: i40e       rss:     12   [supported by zc]
name: enp3s0f1             driver: i40e       rss:     12   [supported by zc]
name: enx0a229512eeb9      driver: cdc_ether  rss:     1    [linux driver]

奇怪的是用 c 寫的相同程式碼也能運作:

#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <pfring.h>

int main() {
    pfring* ring = pfring_open("eno1@0", 1574, pf_ring_promisc | pf_ring_zc_not_reprogram_rss);
    if (ring != null) {
        printf("success!\n");
        exit(0);
    }
    int e = errno;
    char* msg = strerror(e);
    printf("failure %d: %s\n", e, msg);
    exit(1);
}
# ./test-c 
Success!

有什麼想法嗎?

解決方法

事實證明,這是 gopacket/pfring 中的一個錯誤,請參閱問題 #147 以及修復。該函式庫對 pfring_open 的呼叫未報告錯誤,但函式庫錯誤解釋了回傳碼。

以上是從 Go 開啟 pfring:pfring NewRing 錯誤:沒有這樣的設備的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除