diff options
author | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2008-07-08 22:29:18 -0700 |
---|---|---|
committer | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2008-07-08 22:29:18 -0700 |
commit | 7ddd7a8c51f05287919e9c4e39756f9a52dac99c (patch) | |
tree | 470a9fe7f1ad83fb3fe275af7fac7f8f78cdbc35 /bgpd/bgp_network.c | |
parent | 28de8497e34585088d74d739d8f6d9ca27eb311d (diff) | |
download | quagga-7ddd7a8c51f05287919e9c4e39756f9a52dac99c.tar.bz2 quagga-7ddd7a8c51f05287919e9c4e39756f9a52dac99c.tar.xz |
Set IPv4 TOS value for BGP
Bugfix 2847
Set TOS to internet control for BGP traffic
Diffstat (limited to 'bgpd/bgp_network.c')
-rw-r--r-- | bgpd/bgp_network.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c index 4289ce20..e981e718 100644 --- a/bgpd/bgp_network.c +++ b/bgpd/bgp_network.c @@ -267,6 +267,11 @@ bgp_connect (struct peer *peer) sockopt_reuseaddr (peer->fd); sockopt_reuseport (peer->fd); +#ifdef IPTOS_PREC_INTERNETCONTROL + if (sockunion_family (&peer->su) == AF_INET) + setsockopt_ipv4_tos (peer->fd, IPTOS_PREC_INTERNETCONTROL); +#endif + #ifdef HAVE_TCP_MD5SIG if (CHECK_FLAG (peer->flags, PEER_FLAG_PASSWORD)) if (sockunion_family (&peer->su) == AF_INET) @@ -362,6 +367,11 @@ bgp_socket (struct bgp *bgp, unsigned short port, char *address) sockopt_reuseaddr (sock); sockopt_reuseport (sock); +#ifdef IPTOS_PREC_INTERNETCONTROL + if (ainfo->ai_family == AF_INET) + setsockopt_ipv4_tos (sock, IPTOS_PREC_INTERNETCONTROL); +#endif + #if defined(HAVE_TCP_MD5SIG) && defined(IPV6_V6ONLY) /* We can not apply MD5SIG to an IPv6 socket. If this is an AF_INET6 socket, we'll have to create another socket for IPv4*/ @@ -419,6 +429,7 @@ bgp_socket (struct bgp *bgp, unsigned short port, char *address) sockopt_reuseaddr (sock); sockopt_reuseport (sock); + setsockopt_ipv4_tos (sock, IPTOS_PREC_INTERNETCONTROL); memset (&sin, 0, sizeof (struct sockaddr_in)); @@ -486,6 +497,10 @@ bgp_socket (struct bgp *bgp, unsigned short port, char *address) sockopt_reuseaddr (sock); sockopt_reuseport (sock); +#ifdef IPTOS_PREC_INTERNETCONTROL + setsockopt_ipv4_tos (sock, IPTOS_PREC_INTERNETCONTROL); +#endif + memset (&sin, 0, sizeof (struct sockaddr_in)); sin.sin_family = AF_INET; |