]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Add group pointer to peer_create function.
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 31 Mar 2016 16:39:29 +0000 (12:39 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 31 Mar 2016 18:01:12 +0000 (14:01 -0400)
When creating a 'struct peer' add in the ability to set the peer group
associated with that peer.

Ticket: CM-10184
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
bgpd/bgp_network.c
bgpd/bgp_vty.c
bgpd/bgpd.c
bgpd/bgpd.h

index b02eabadcae697861a7dd8621d9e6bcb357022c4..61986f561bdd840d6525b0ad262ac3d164c44a10 100644 (file)
@@ -408,7 +408,7 @@ bgp_accept (struct thread *thread)
                  peer1->host);
 
   peer = peer_create (&su, peer1->conf_if, peer1->bgp, peer1->local_as,
-                     peer1->as, peer1->as_type, 0, 0);
+                     peer1->as, peer1->as_type, 0, 0, NULL);
   peer->su = su;
 
   peer_xfer_config(peer, peer1);
index 37909dd26cf159c2b6c5866e6f065e89dafd5124..c1648c1c96cdb6cdf1d2104e3bf392b6287919d7 100644 (file)
@@ -2706,9 +2706,9 @@ peer_conf_interface_get (struct vty *vty, const char *conf_if, afi_t afi,
     {
       if (bgp_flag_check (bgp, BGP_FLAG_NO_DEFAULT_IPV4)
           && afi == AFI_IP && safi == SAFI_UNICAST)
-        peer = peer_create (NULL, conf_if, bgp, bgp->as, 0, AS_UNSPECIFIED, 0, 0);
+        peer = peer_create (NULL, conf_if, bgp, bgp->as, 0, AS_UNSPECIFIED, 0, 0, NULL);
       else
-        peer = peer_create (NULL, conf_if, bgp, bgp->as, 0, AS_UNSPECIFIED, afi, safi);
+        peer = peer_create (NULL, conf_if, bgp, bgp->as, 0, AS_UNSPECIFIED, afi, safi, NULL);
 
       if (peer && v6only)
         SET_FLAG(peer->flags, PEER_FLAG_IFPEER_V6ONLY);
index 478ec856511ec8b05d9f70c2fc26ce77d1dca76c..a16cf34a6fe364fc514606a37b9dce0265f0d747 100644 (file)
@@ -1379,7 +1379,7 @@ bgp_recalculate_all_bestpaths (struct bgp *bgp)
 /* Create new BGP peer.  */
 struct peer *
 peer_create (union sockunion *su, const char *conf_if, struct bgp *bgp,
-             as_t local_as, as_t remote_as, int as_type, afi_t afi, safi_t safi)
+             as_t local_as, as_t remote_as, int as_type, afi_t afi, safi_t safi, struct peer_group *group)
 {
   int active;
   struct peer *peer;
@@ -1413,6 +1413,7 @@ peer_create (union sockunion *su, const char *conf_if, struct bgp *bgp,
     peer->v_routeadv = BGP_DEFAULT_EBGP_ROUTEADV;
 
   peer = peer_lock (peer); /* bgp peer list reference */
+  peer->group = group;
   listnode_add_sort (bgp->peer, peer);
   hash_get(bgp->peerhash, peer, hash_alloc_intern);
 
@@ -1605,9 +1606,9 @@ peer_remote_as (struct bgp *bgp, union sockunion *su, const char *conf_if,
 
       if (bgp_flag_check (bgp, BGP_FLAG_NO_DEFAULT_IPV4)
          && afi == AFI_IP && safi == SAFI_UNICAST)
-       peer = peer_create (su, conf_if, bgp, local_as, *as, as_type, 0, 0);
+       peer = peer_create (su, conf_if, bgp, local_as, *as, as_type, 0, 0, NULL);
       else
-       peer = peer_create (su, conf_if, bgp, local_as, *as, as_type, afi, safi);
+       peer = peer_create (su, conf_if, bgp, local_as, *as, as_type, afi, safi, NULL);
     }
 
   return 0;
@@ -2601,8 +2602,7 @@ peer_group_bind (struct bgp *bgp, union sockunion *su, struct peer *peer,
           return BGP_ERR_PEER_GROUP_NO_REMOTE_AS;
         }
 
-      peer = peer_create (su, NULL, bgp, bgp->as, group->conf->as, group->conf->as_type, 0, 0);
-      peer->group = group;
+      peer = peer_create (su, NULL, bgp, bgp->as, group->conf->as, group->conf->as_type, 0, 0, group);
 
       peer = peer_lock (peer); /* group->peer list reference */
       listnode_add (group->peer, peer);
@@ -3227,12 +3227,11 @@ peer_create_bind_dynamic_neighbor (struct bgp *bgp, union sockunion *su,
   safi_t safi;
 
   /* Create peer first; we've already checked group config is valid. */
-  peer = peer_create (su, NULL, bgp, bgp->as, group->conf->as, group->conf->as_type, 0, 0);
+  peer = peer_create (su, NULL, bgp, bgp->as, group->conf->as, group->conf->as_type, 0, 0, group);
   if (!peer)
     return NULL;
 
   /* Link to group */
-  peer->group = group;
   peer = peer_lock (peer);
   listnode_add (group->peer, peer);
 
index e72fab006db85c2052f423dc82ddf288155ec7a2..7846d03ca5190a98ada569252ee9f6bb4c52bc3d 100644 (file)
@@ -1166,7 +1166,7 @@ extern int peer_active (struct peer *);
 extern int peer_active_nego (struct peer *);
 extern void bgp_recalculate_all_bestpaths (struct bgp *bgp);
 extern struct peer *peer_create(union sockunion *, const char *, struct bgp *,
-                                as_t, as_t, int, afi_t, safi_t);
+                                as_t, as_t, int, afi_t, safi_t, struct peer_group *);
 extern struct peer *peer_create_accept (struct bgp *);
 extern void peer_xfer_config (struct peer *dst, struct peer *src);
 extern char *peer_uptime (time_t, char *, size_t, u_char, json_object *);