summaryrefslogtreecommitdiff
path: root/bgpd/bgp_network.c
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/bgp_network.c')
-rw-r--r--bgpd/bgp_network.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c
index 71f3ec7d..5dbd4872 100644
--- a/bgpd/bgp_network.c
+++ b/bgpd/bgp_network.c
@@ -314,6 +314,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
+
if (peer->password)
bgp_md5_set_connect (peer->fd, &peer->su, peer->password);
@@ -402,6 +407,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 (bgpd_privs.change (ZPRIVS_RAISE) )
zlog_err ("bgp_socket: could not raise privs");
@@ -454,6 +464,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;