[ovs-discuss] Tap interface in the OVS

sougol gheissi sougol.gheissi at gmail.com
Mon Oct 2 11:54:01 UTC 2017


Hello again
I have another problem here, I did add the tap interface first in the linux
and second in the ovs with the commands mentioned. But the problem is I get
the error: ovs-vsctl: Error detected while setting up 'int0'. See
ovs-vswitchd log for details.
and in the ovs-vswitchd log is: failed to add int0 as port: file exist
but ovs keep adding the port with various port number after that, so I have
recomputing topology in controller in every single second.
Any suggestion would be appreciated.

On Sun, Sep 3, 2017 at 4:27 PM, Avi Cohen (A) <avi.cohen at huawei.com> wrote:

> Add the tap in linux to be recognized by linux:   ip tuntap add dev int0  mode tap
>
> Then add it to the ovs
>
>
>
> *From:* ovs-discuss-bounces at openvswitch.org [mailto:ovs-discuss-bounces@
> openvswitch.org] *On Behalf Of *sougol gheissi
> *Sent:* Sunday, 03 September, 2017 2:25 PM
> *To:* ovs-discuss at openvswitch.org
> *Subject:* [ovs-discuss] Tap interface in the OVS
>
>
>
> Hello all,
>
> I want to capture the packets in the userspace, so I decided to use tap
> interface in the OVS. I added a tap interface using the command below:
>
> #ovs-vsctl add-port br0 int0 -- set Interface int0 type=internal
>
> then I tried to send the packets to that port by this OVS command:
>
> #ovs-ofctl add-flow br0 table=0,priority=100,udp,tp_dst=5060,actions=output:5
>
> (5 is the int0 port number)
> then I write a piece of code to capture the packets,
>
> #include <unistd.h>
>
> #include <fcntl.h>
>
> #include <stdlib.h>
>
> #include <stdio.h>
>
> #include <string.h>
>
> #include <syslog.h>
>
> #include <errno.h>
>
> #include <stdlib.h>
>
> #include <unistd.h>
>
> #include <sys/socket.h>
>
> #include <netinet/in.h>
>
> #include <netinet/tcp.h>
>
> #include <netinet/ip.h>
>
> #include <netpacket/packet.h>
>
> #include <stdio.h>
>
> #include <stdlib.h>
>
> #include <errno.h>
>
> #include <getopt.h>
>
> #include <string.h>
>
> #include <arpa/inet.h>
>
> #include <stdio.h>
>
> #include <sys/socket.h>
>
> #include <arpa/inet.h>
>
> #include <malloc.h>
>
> #include <net/ethernet.h>
>
> #include <sys/ioctl.h>
>
> #include <net/if.h>
>
> #include <string.h>
>
> #include <sys/types.h>
>
> #include <time.h>
>
> #include <sys/ioctl.h>
>
> #include <sys/socket.h>
>
> #include <linux/if.h>
>
> #include <linux/if_tun.h>
>
> #include <signal.h>
>
>
>
>
>
> static int tap_open(char *dev)
>
> {   struct ifreq ifr;
>
>     int fd;
>
>
>
>     if ((fd = open("/dev/net/tun", O_RDWR)) < 0) { return -1; }
>
>
>
>     memset(&ifr, 0, sizeof(ifr));
>
>     ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
>
>     if (*dev) strncpy(ifr.ifr_name, dev, IFNAMSIZ);
>
>     if (ioctl(fd, TUNSETIFF, (void *) &ifr) < 0) { goto failed; }
>
>
>
>     strcpy(dev, ifr.ifr_name); return fd;
>
>
>
> failed:
>
>     close(fd); return -1;
>
> }
>
>
>
>
>
> int tapfd;
>
> void signal_handler(int sig) { close(tapfd); exit(1); }
>
>
>
> int main()
>
> {      unsigned char buf[2000];
>
>        unsigned char name[20];
>
>        int i;
>
>        int numbytes=0;
>
>
>
>
>
>        strcpy(name,"inet0"); tapfd=tap_open(name);
>
>        if(tapfd<0) { printf("port open error!\n"); return 0; }
>
>
>
> signal(SIGHUP,signal_handler);
>
> signal(SIGTERM,signal_handler);
>
> signal(SIGKILL,signal_handler);
>
> signal(SIGSTOP,signal_handler);
>
> signal(SIGINT,signal_handler);
>
>
>
> repeat:
>
>        numbytes=read(tapfd, buf, 2000);
>
>        if(numbytes<=0) { usleep(100); goto repeat;}
>
>
>
>        printf("\tTAP Data:");
>
>        for (i=0; i<numbytes; i++) printf("%02x:", buf[i]);
>
>        printf("\n\n");
>
>
>
>        goto repeat;
>
>
>
>        close(tapfd);
>
>        return 0;
>
> }
>
> But I get "port open error!" which shows I can not open the fd. Can
> anyone help me how to add a tap interface with OVS?
>
> Thanks in advance
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openvswitch.org/pipermail/ovs-discuss/attachments/20171002/6f0e4ed9/attachment.html>


More information about the discuss mailing list