2004-05-01 Paul Jakma <paul@dishone.st>
* Revert the attempted clean-up of the dummy peer hack, reverts
patchsets 435 (see 2004-02-17 below) and 456.
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index ae8af9f..e9d81de 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -504,10 +504,11 @@
return 0;
}
+/* Peer comparison function for sorting. */
static int
peer_cmp (struct peer *p1, struct peer *p2)
{
- return sockunion_cmp (&p1->su, &p2->su);
+ return sockunion_cmp (&p1->su, &p2->su);
}
int
@@ -683,11 +684,8 @@
peer = XMALLOC (MTYPE_BGP_PEER, sizeof (struct peer));
memset (peer, 0, sizeof (struct peer));
- peer->fd = &peer->fd_local;
-
/* Set default value. */
- peer->fd_local = -1;
- peer->fd_accept = -1;
+ peer->fd = -1;
peer->v_start = BGP_INIT_START_TIMER;
peer->v_connect = BGP_DEFAULT_CONNECT_RETRY;
peer->v_asorig = BGP_DEFAULT_ASORIGINATE;
@@ -771,6 +769,19 @@
return peer;
}
+/* Make accept BGP peer. Called from bgp_accept (). */
+struct peer *
+peer_create_accept (struct bgp *bgp)
+{
+ struct peer *peer;
+
+ peer = peer_new ();
+ peer->bgp = bgp;
+ listnode_add_sort (bgp->peer, peer);
+
+ return peer;
+}
+
/* Change peer's AS number. */
void
peer_as_change (struct peer *peer, as_t as)
@@ -1799,8 +1810,9 @@
LIST_LOOP (bgp->peer, peer, nn)
{
- if (sockunion_same (&peer->su, su))
- return peer;
+ if (sockunion_same (&peer->su, su)
+ && ! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
+ return peer;
}
return NULL;
}
@@ -1819,25 +1831,27 @@
LIST_LOOP (bgp->peer, peer, nn)
{
- if (sockunion_same (&peer->su, su))
- {
- if (peer->as == remote_as
- && peer->remote_id.s_addr == remote_id->s_addr)
- return peer;
- if (peer->as == remote_as)
- *as = 1;
- }
+ if (sockunion_same (&peer->su, su)
+ && ! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
+ {
+ if (peer->as == remote_as
+ && peer->remote_id.s_addr == remote_id->s_addr)
+ return peer;
+ if (peer->as == remote_as)
+ *as = 1;
+ }
}
LIST_LOOP (bgp->peer, peer, nn)
{
- if (sockunion_same (&peer->su, su))
- {
- if (peer->as == remote_as
- && peer->remote_id.s_addr == 0)
- return peer;
- if (peer->as == remote_as)
- *as = 1;
- }
+ if (sockunion_same (&peer->su, su)
+ && ! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
+ {
+ if (peer->as == remote_as
+ && peer->remote_id.s_addr == 0)
+ return peer;
+ if (peer->as == remote_as)
+ *as = 1;
+ }
}
return NULL;
}
@@ -2264,24 +2278,22 @@
if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
{
- if (*peer->fd >= 0 && peer_sort (peer) != BGP_PEER_IBGP)
- sockopt_ttl (peer->su.sa.sa_family, *peer->fd,
- peer->ttl);
+ if (peer->fd >= 0 && peer_sort (peer) != BGP_PEER_IBGP)
+ sockopt_ttl (peer->su.sa.sa_family, peer->fd, peer->ttl);
}
else
{
group = peer->group;
LIST_LOOP (group->peer, peer, nn)
- {
- if (peer_sort (peer) == BGP_PEER_IBGP)
- continue;
+ {
+ if (peer_sort (peer) == BGP_PEER_IBGP)
+ continue;
- peer->ttl = group->conf->ttl;
+ peer->ttl = group->conf->ttl;
- if (*peer->fd >= 0)
- sockopt_ttl (peer->su.sa.sa_family,
- *peer->fd, peer->ttl);
- }
+ if (peer->fd >= 0)
+ sockopt_ttl (peer->su.sa.sa_family, peer->fd, peer->ttl);
+ }
}
return 0;
}
@@ -2302,24 +2314,22 @@
if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
{
- if (*peer->fd >= 0 && peer_sort (peer) != BGP_PEER_IBGP)
- sockopt_ttl (peer->su.sa.sa_family,
- *peer->fd, peer->ttl);
+ if (peer->fd >= 0 && peer_sort (peer) != BGP_PEER_IBGP)
+ sockopt_ttl (peer->su.sa.sa_family, peer->fd, peer->ttl);
}
else
{
group = peer->group;
LIST_LOOP (group->peer, peer, nn)
- {
- if (peer_sort (peer) == BGP_PEER_IBGP)
- continue;
+ {
+ if (peer_sort (peer) == BGP_PEER_IBGP)
+ continue;
- peer->ttl = 1;
-
- if (*peer->fd >= 0)
- sockopt_ttl (peer->su.sa.sa_family,
- *peer->fd, peer->ttl);
- }
+ peer->ttl = 1;
+
+ if (peer->fd >= 0)
+ sockopt_ttl (peer->su.sa.sa_family, peer->fd, peer->ttl);
+ }
}
return 0;
}