Jump to content
Калькуляторы

Linux bridge FDB

А ктонить подскажет в каком файлике можна глянуть всю FDb ?? тоесть чтобы не использовать brctl showmacs bridgeXXX ??

Ато перерыл вроде всю ветку /proc и ничего похожего не видать..

Share this post


Link to post
Share on other sites

Не уверен что поможет ..

#strace brctl  showmacs SVL0  2>&1 | grep open
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib64/libc.so.6", O_RDONLY)      = 3
open("/sys/class/net/SVL0/brforward", O_RDONLY) = 4
open("/sys/class/net/SVL0/brforward", O_RDONLY) = 4
open("/sys/class/net/SVL0/brforward", O_RDONLY) = 4
open("/sys/class/net/SVL0/brforward", O_RDONLY) = 4
open("/sys/class/net/SVL0/brforward", O_RDONLY) = 4
open("/sys/class/net/SVL0/brforward", O_RDONLY) = 4
open("/sys/class/net/SVL0/brforward", O_RDONLY) = 4
open("/sys/class/net/SVL0/brforward", O_RDONLY) = 4
open("/proc/meminfo", O_RDONLY)         = 4

Share this post


Link to post
Share on other sites

2 sirmax - спасибо, но к сожалению ничего не нашел там, хотя теоретически похоже что в brforward будут маки, но как их оттуда выгрести ??

Share this post


Link to post
Share on other sites

2 sirmax - спасибо, но к сожалению ничего не нашел там, хотя теоретически похоже что в brforward будут маки, но как их оттуда выгрести ??

Я потому и написал, что не уверен что поможет =) сходу не нагуглил, надо в код смотреть как оно их достает.

Но нет ни времени не сил.

Если сделаете - расскажите, инетерсно.

в /usr/src/linux/Documentation тоже ничего сходу не нашел

Share this post


Link to post
Share on other sites

да гуглю с самого утра.. пока ничего интересного. На данный момент решение только циклом просматривать все интерфейсы и делать brctl showmacs bridgeXXX и выводить.. Но не хочется такую громадину городить.

Share this post


Link to post
Share on other sites

Никак. Все FDB хранятся в памяти ядра, причём у каждого моста она (FDB) отдельная. Так что все записи можно получить только пробежавшись в цилке по всем мостам в системе, забирая с каждого.

Share this post


Link to post
Share on other sites

Выдернул из libbridge(bridge-utils):

 

int br_read_fdb(const char *bridge, struct fdb_entry *fdbs, 
               unsigned long offset, int num)  
{
       FILE *f;
       int i, n;
       struct __fdb_entry fe[num];
       char path[sYSFS_PATH_MAX]; 

       /* open /sys/class/net/brXXX/brforward */
       snprintf(path, SYSFS_PATH_MAX, SYSFS_CLASS_NET "%s/brforward", bridge);
       f = fopen(path, "r");
       if (f) {
               fseek(f, offset*sizeof(struct __fdb_entry), SEEK_SET);
               n = fread(fe, sizeof(struct __fdb_entry), num, f);
               fclose(f);
       } else {
               /* old kernel, use ioctl */
               unsigned long args[4] = { BRCTL_GET_FDB_ENTRIES,
                                         (unsigned long) fe,
                                         num, offset };
               struct ifreq ifr;
               int retries = 0; 

               strncpy(ifr.ifr_name, bridge, IFNAMSIZ);
               ifr.ifr_data = (char *) args;

       retry:
               n = ioctl(br_socket_fd, SIOCDEVPRIVATE, &ifr);

               /* table can change during ioctl processing */
               if (n < 0 && errno == EAGAIN && ++retries < 10) {
                       sleep(0);
                       goto retry;
               }
       }

       for (i = 0; i < n; i++) 
               __copy_fdb(fdbs+i, fe+i);

       return n;
}

 

сама fdb_entry объявлена вот так:

 

struct fdb_entry
{
       u_int8_t mac_addr[6];
       u_int16_t port_no;
       unsigned char is_local;
       struct timeval ageing_timer_value;
};

Share this post


Link to post
Share on other sites

В iproute2 добавили команду bridge.

 

NAME
      bridge - show / manipulate bridge addresses and devices

SYNOPSIS
      bridge [ OPTIONS ] OBJECT { COMMAND | help }

      OBJECT := { link | fdb | vlan | monitor }

      OPTIONS := { -V[ersion] | -s[tatistics] }

      bridge link set dev DEV  [ cost COST ] [ priority PRIO ]  [ state STATE] [ guard { on | off } ] [ hairpin { on | off } ] [ fastleave { on | off }
              ] [ root_block { on | off } ] [ hwmode { vepa | veb } ]

      bridge link [ show ] [ dev DEV ]

      bridge fdb { add | del } LLADDR dev DEV { local | temp } { self } { embedded }

      bridge fdb [ show ] [ dev DEV ]

      bridge vlan { add | del } dev DEV vid VID [ pvid ] [ untagged ]  [ self ]  [ master ]

      bridge vlan [ show ] [ dev DEV ]

      bridge monitor [ all | neigh | link ]

Share this post


Link to post
Share on other sites

)) спасибо, но уже переполз на МХ80 )

Share this post


Link to post
Share on other sites

ну то я просто в git посмотрел. а тут собрал и засетапил.

 

кстати, из интересных вещей ещё vxvlan - позволяет гонять l2 поверх мультикаста.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this