Commit 9f4908fe authored by Ondrej Zajicek (work)'s avatar Ondrej Zajicek (work)
Browse files

Nest: VRF support for neighbor cache and olock code

Actually much simpler than expected.
parent 943478b0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ olock_same(struct object_lock *x, struct object_lock *y)
  return
    x->type == y->type &&
    x->iface == y->iface &&
    x->vrf == y->vrf &&
    x->port == y->port &&
    x->inst == y->inst &&
    ipa_equal(x->addr, y->addr);
+1 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ struct object_lock {
  uint port;		/* ... port number */
  uint inst;		/* ... instance ID */
  struct iface *iface;	/* ... interface */
  struct iface *vrf;	/* ... or VRF (if iface is unknown) */
  void (*hook)(struct object_lock *);	/* Called when the lock succeeds */
  void *data;		/* User data */
  /* ... internal to lock manager, don't touch ... */
+5 −3
Original line number Diff line number Diff line
@@ -30,7 +30,8 @@
 * when the protocol has explicitly requested it via the %NEF_STICKY
 * flag because it wishes to be notified when the node will again become
 * a neighbor. Such entries are enqueued in a special list which is walked
 * whenever an interface changes its state to up.
 * whenever an interface changes its state to up. Neighbor entry VRF
 * association is implied by respective protocol.
 *
 * When a neighbor event occurs (a neighbor gets disconnected or a sticky
 * inactive neighbor becomes connected), the protocol hook neigh_notify()
@@ -152,7 +153,8 @@ neigh_find2(struct proto *p, ip_addr *a, struct iface *ifa, unsigned flags)
    }
  else
    WALK_LIST(i, iface_list)
      if ((scope = if_connected(a, i, &addr)) >= 0)
      if ((!p->vrf || p->vrf == i->master) &&
	  ((scope = if_connected(a, i, &addr)) >= 0))
        {
	  ifa = i;
	  break;
+1 −0
Original line number Diff line number Diff line
@@ -1181,6 +1181,7 @@ bgp_start(struct proto *P)
  lock->addr = p->cf->remote_ip;
  lock->port = p->cf->remote_port;
  lock->iface = p->cf->iface;
  lock->vrf = p->cf->iface ? NULL : p->p.vrf;
  lock->type = OBJLOCK_TCP;
  lock->hook = bgp_start_locked;
  lock->data = p;
+0 −1
Original line number Diff line number Diff line
@@ -321,7 +321,6 @@ radv_iface_new(struct radv_proto *p, struct iface *iface, struct radv_iface_conf
  ifa->timer = tm;

  struct object_lock *lock = olock_new(pool);
  lock->addr = IPA_NONE;
  lock->type = OBJLOCK_IP;
  lock->port = ICMPV6_PROTO;
  lock->iface = iface;