{
int ret = -1;
int en = ENOSYS;
+ union sockunion su2;
assert (socket >= 0);
#if HAVE_DECL_TCP_MD5SIG
- ret = sockopt_tcp_signature (socket, su, password);
+ /* Ensure there is no extraneous port information. */
+ memcpy (&su2, su, sizeof (union sockunion));
+ if (su2.sa.sa_family == AF_INET)
+ su2.sin.sin_port = 0;
+ else
+ su2.sin6.sin6_port = 0;
+ ret = sockopt_tcp_signature (socket, &su2, password);
en = errno;
#endif /* HAVE_TCP_MD5SIG */
if (peer_src->password && !peer_dst->password)
peer_dst->password = XSTRDUP (MTYPE_PEER_PASSWORD, peer_src->password);
- bgp_md5_set (peer_dst);
-
for (afi = AFI_IP; afi < AFI_MAX; afi++)
for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
{
struct bgp *bgp;
struct bgp_filter *filter;
struct listnode *pn;
+ int accept_peer;
assert (peer->status != Deleted);
bgp = peer->bgp;
+ accept_peer = CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER);
if (CHECK_FLAG (peer->sflags, PEER_STATUS_NSF_WAIT))
peer_nsf_stop (peer);
XFREE (MTYPE_PEER_PASSWORD, peer->password);
peer->password = NULL;
- if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
+ if (!accept_peer &&
+ ! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
bgp_md5_set (peer);
}