zed.0xff.me

FreeBSD & more than 32 arpd's

0. Предыстория

  • Есть фрибсд-сервер.
  • На сервере есть куча интерфейсов (~200).
  • На некоторых интерфейсах надо пускать arpd.

1. Bug

  • 16 arpd-ей запустились нормально.
  • На запуске 17-го получаем “arpd: bad interface configuration: not IP or Ethernet
  • Копание в исходниках показало что проблема в libdnet, в коем гвоздями прибито не юзать /dev/bpf’ы с номером более 32

3. Patch for /usr/ports/net/libdnet

1
2
3
4
5
6
7
8
9
10
11
--- src/eth-bsd.c.orig        2009-04-16 14:22:44.000000000 +0600
+++ src/eth-bsd.c        2009-04-16 14:23:31.000000000 +0600
@@ -45,7 +45,7 @@
         int i;
 
         if ((e = calloc(1, sizeof(*e))) != NULL) {
-                for (i = 0; i < 32; i++) {
+                for (i = 0; i < 256; i++) {
                         snprintf(file, sizeof(file), "/dev/bpf%d", i);
                         e->fd = open(file, O_WRONLY);
                         if (e->fd != -1 || errno != EBUSY)

4. FreeBSD PR: ports/133772