Home > Backend Development > Golang > Opening pfring from Go: pfring NewRing Error: No such device

Opening pfring from Go: pfring NewRing Error: No such device

王林
Release: 2024-02-10 17:30:09
forward
486 people have browsed it

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

When doing network programming, we often encounter some errors and exceptions. Among them, the "pfring NewRing error: No such device" problem that occurs when opening the pfring library from the Go language is a common error that plagues developers. PHP editor Zimo will analyze the reasons and solutions for this error and help you solve this problem smoothly.

Question content

I want to use the github.com/google/gopacket/pfring package to call pf_ring from go code, but can't make it run on debian 11 ( My code runs on debian 10).

This is my go code:

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)
}
Copy after login

When I run it:

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

Obviously the eno1 interface exists:

# 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]
Copy after login

The weird thing is that the same code written in c also works:

#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);
}
Copy after login
# ./test-c 
Success!
Copy after login

Any ideas?

Workaround

Turns out this is a bug in gopacket/pfring, see Issue #147 and Fixes. The library's call to pfring_open reported no error, but the library misinterpreted the return code.

The above is the detailed content of Opening pfring from Go: pfring NewRing Error: No such device. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template