diff options
| author | Renato Westphal <renato@opensourcerouting.org> | 2019-01-04 19:08:10 -0200 | 
|---|---|---|
| committer | Renato Westphal <renato@opensourcerouting.org> | 2019-01-18 16:15:41 -0200 | 
| commit | 045c5389c26347d47b2af6020c3a122398f13efb (patch) | |
| tree | 82470cd9147b5032bac1d74a2e5b0d6eb42722c3 /ripd/rip_peer.c | |
| parent | 711915d2cdef4dcf41c6921f98de29946cab500e (diff) | |
ripd: remove the rip global variable
This is the last step to make ripd ready for multi-instance support.
Remove the rip global variable and add a "rip" parameter to all
functions that need to know the RIP instance they are working
on. On some functions, retrieve the RIP instance from the interface
variable when it exists (this assumes interfaces can pertain to
one RIP instance at most, which is ok for VRF support).
In preparation for the next commits (VRF support), add a "vrd_id"
member to the rip structure, and use rip->vrf_id instead of
VRF_DEFAULT wherever possible.
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
Diffstat (limited to 'ripd/rip_peer.c')
| -rw-r--r-- | ripd/rip_peer.c | 25 | 
1 files changed, 13 insertions, 12 deletions
diff --git a/ripd/rip_peer.c b/ripd/rip_peer.c index 07b295030e..08aa61257d 100644 --- a/ripd/rip_peer.c +++ b/ripd/rip_peer.c @@ -40,7 +40,7 @@ static void rip_peer_free(struct rip_peer *peer)  	XFREE(MTYPE_RIP_PEER, peer);  } -struct rip_peer *rip_peer_lookup(struct in_addr *addr) +struct rip_peer *rip_peer_lookup(struct rip *rip, struct in_addr *addr)  {  	struct rip_peer *peer;  	struct listnode *node, *nnode; @@ -52,7 +52,7 @@ struct rip_peer *rip_peer_lookup(struct in_addr *addr)  	return NULL;  } -struct rip_peer *rip_peer_lookup_next(struct in_addr *addr) +struct rip_peer *rip_peer_lookup_next(struct rip *rip, struct in_addr *addr)  {  	struct rip_peer *peer;  	struct listnode *node, *nnode; @@ -70,24 +70,25 @@ static int rip_peer_timeout(struct thread *t)  	struct rip_peer *peer;  	peer = THREAD_ARG(t); -	listnode_delete(rip->peer_list, peer); +	listnode_delete(peer->rip->peer_list, peer);  	rip_peer_free(peer);  	return 0;  }  /* Get RIP peer.  At the same time update timeout thread. */ -static struct rip_peer *rip_peer_get(struct in_addr *addr) +static struct rip_peer *rip_peer_get(struct rip *rip, struct in_addr *addr)  {  	struct rip_peer *peer; -	peer = rip_peer_lookup(addr); +	peer = rip_peer_lookup(rip, addr);  	if (peer) {  		if (peer->t_timeout)  			thread_cancel(peer->t_timeout);  	} else {  		peer = rip_peer_new(); +		peer->rip = rip;  		peer->addr = *addr;  		listnode_add_sort(rip->peer_list, peer);  	} @@ -103,24 +104,24 @@ static struct rip_peer *rip_peer_get(struct in_addr *addr)  	return peer;  } -void rip_peer_update(struct sockaddr_in *from, uint8_t version) +void rip_peer_update(struct rip *rip, struct sockaddr_in *from, uint8_t version)  {  	struct rip_peer *peer; -	peer = rip_peer_get(&from->sin_addr); +	peer = rip_peer_get(rip, &from->sin_addr);  	peer->version = version;  } -void rip_peer_bad_route(struct sockaddr_in *from) +void rip_peer_bad_route(struct rip *rip, struct sockaddr_in *from)  {  	struct rip_peer *peer; -	peer = rip_peer_get(&from->sin_addr); +	peer = rip_peer_get(rip, &from->sin_addr);  	peer->recv_badroutes++;  } -void rip_peer_bad_packet(struct sockaddr_in *from) +void rip_peer_bad_packet(struct rip *rip, struct sockaddr_in *from)  {  	struct rip_peer *peer; -	peer = rip_peer_get(&from->sin_addr); +	peer = rip_peer_get(rip, &from->sin_addr);  	peer->recv_badpackets++;  } @@ -153,7 +154,7 @@ static char *rip_peer_uptime(struct rip_peer *peer, char *buf, size_t len)  	return buf;  } -void rip_peer_display(struct vty *vty) +void rip_peer_display(struct vty *vty, struct rip *rip)  {  	struct rip_peer *peer;  	struct listnode *node, *nnode;  | 
