]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Merge commit '13d4dd138d5dc6c884ded280f9244fac707c4f32' into integrated
authorOndrej Zajicek <santiago@crfreenet.org>
Sat, 12 Jan 2013 23:44:39 +0000 (00:44 +0100)
committerOndrej Zajicek <santiago@crfreenet.org>
Sat, 12 Jan 2013 23:44:39 +0000 (00:44 +0100)
1  2 
conf/conf.c
filter/filter.c
nest/config.Y
nest/iface.c
nest/proto.c
nest/protocol.h
nest/rt-table.c
proto/ospf/ospf.c
sysdep/unix/io.c
sysdep/unix/krt.c
sysdep/unix/unix.h

diff --cc conf/conf.c
Simple merge
diff --cc filter/filter.c
Simple merge
diff --cc nest/config.Y
index c6bb63ccf1e0f00cf3acbdbd0bfcf9285c8a8849,e46b5fb555def5f6922a5513f70212d8f092983a..f4052ae6a739b1a3eb9afef7ddf5e86b48747f01
@@@ -44,10 -44,9 +44,10 @@@ CF_DECL
  
  CF_KEYWORDS(ROUTER, ID, PROTOCOL, TEMPLATE, PREFERENCE, DISABLED, DEBUG, ALL, OFF, DIRECT)
  CF_KEYWORDS(INTERFACE, IMPORT, EXPORT, FILTER, NONE, TABLE, STATES, ROUTES, FILTERS)
- CF_KEYWORDS(LIMIT, ACTION, WARN, BLOCK, RESTART, DISABLE, KEEP, FILTERED)
 +CF_KEYWORDS(IPV4, IPVX, VPN4, VPN6, MPLS)
+ CF_KEYWORDS(RECEIVE, LIMIT, ACTION, WARN, BLOCK, RESTART, DISABLE, KEEP, FILTERED)
  CF_KEYWORDS(PASSWORD, FROM, PASSIVE, TO, ID, EVENTS, PACKETS, PROTOCOLS, INTERFACES)
 -CF_KEYWORDS(PRIMARY, STATS, COUNT, FOR, COMMANDS, PREEXPORT, GENERATE, ROA, MAX, FLUSH)
 +CF_KEYWORDS(PRIMARY, STATS, COUNT, FOR, COMMANDS, PREEXPORT, GENERATE, ROA, AS, MAX, FLUSH)
  CF_KEYWORDS(LISTEN, BGP, V6ONLY, DUAL, ADDRESS, PORT, PASSWORDS, DESCRIPTION, SORTED)
  CF_KEYWORDS(RELOAD, IN, OUT, MRTDUMP, MESSAGES, RESTRICT, MEMORY, IGP_METRIC)
  
diff --cc nest/iface.c
index 7f756e5c80bf27f05edf6ba6ef2f560bd5a4c2e7,da79b21f7d452d93c9e7651a8cb6c1d27a5dd0a5..1664670e46b525c670831cd06951bcc496f44ea4
@@@ -581,27 -578,57 +576,59 @@@ ifa_delete(struct ifa *a
        }
  }
  
- static void
- auto_router_id(void)
+ u32
+ if_choose_router_id(struct iface_patt *mask, u32 old_id)
  {
 -#ifndef IPV6
 +// XXXX check this
 +#if 0
 +
-   struct iface *i, *j;
+   struct iface *i;
+   struct ifa *a, *b;
  
-   j = NULL;
+   b = NULL;
    WALK_LIST(i, iface_list)
-     if ((i->flags & IF_ADMIN_UP) &&
-       !(i->flags & (IF_IGNORE | IF_SHUTDOWN)) &&
-       i->addr &&
-       !(i->addr->flags & IA_PEER) &&
-       (!j || ipa_to_u32(i->addr->ip) < ipa_to_u32(j->addr->ip)))
-       j = i;
-   if (!j)
-     die("Cannot determine router ID (no suitable network interface found), please configure it manually");
-   log(L_INFO "Guessed router ID %I according to interface %s", j->addr->ip, j->name);
-   config->router_id = ipa_to_u32(j->addr->ip);
+     {
+       if (!(i->flags & IF_ADMIN_UP) ||
+         (i->flags & (IF_IGNORE | IF_SHUTDOWN)))
+       continue;
+       WALK_LIST(a, i->addrs)
+       {
+         if (a->flags & IA_SECONDARY)
+           continue;
+         if (a->scope <= SCOPE_LINK)
+           continue;
+         /* FIXME: This should go away */
+         if (a->flags & IA_PEER)
+           continue;
+         /* FIXME: This should go away too */
+         if (!mask && (a != i->addr))
+           continue;
+         /* Check pattern if specified */
+         if (mask && !iface_patt_match(mask, i, a))
+           continue;
+         /* No pattern or pattern matched */
+         if (!b || ipa_to_u32(a->ip) < ipa_to_u32(b->ip))
+           b = a;
+       }
+     }
+   if (!b)
+     return 0;
+   u32 id = ipa_to_u32(b->ip);
+   if (id != old_id)
+     log(L_INFO "Chosen router ID %R according to interface %s", id, b->iface->name);
+   return id;
+ #else
+   return 0;
  #endif
  }
  
diff --cc nest/proto.c
Simple merge
diff --cc nest/protocol.h
Simple merge
diff --cc nest/rt-table.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge