Перейти к содержимому
Калькуляторы

Linux bridge FDB

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

#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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Выдернул из 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;
};

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 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 ]

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

Еще есть bridge из iproute2:

https://git.kernel.o...ea55e997a328c66

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.