diff options
-rw-r--r-- | ospfd/ChangeLog | 3 | ||||
-rw-r--r-- | ospfd/ospf_network.c | 30 |
2 files changed, 20 insertions, 13 deletions
diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog index 7bff0a36..ebeaa5bc 100644 --- a/ospfd/ChangeLog +++ b/ospfd/ChangeLog @@ -1,5 +1,8 @@ 2004-05-05 Paul Jakma <paul@dishone.st> + * ospf_network.c: (ospf_sock_init) Check whether IP_HDRINCL is + defined. Warn at compile and runtime. Use + IPTOS_PREC_INTERNETCONTROL otherwise. * ospf_packet.c: (ospf_associate_packet_vl) cleanup, move some of the checks up to ospf_read, return either a virtual link oi, or NULL. diff --git a/ospfd/ospf_network.c b/ospfd/ospf_network.c index 87dfb60a..2766abd5 100644 --- a/ospfd/ospf_network.c +++ b/ospfd/ospf_network.c @@ -170,9 +170,20 @@ ospf_sock_init (void) exit(-1); } - +#ifdef IP_HDRINCL + /* we will include IP header with packet */ + ret = setsockopt (ospf_sock, IPPROTO_IP, IP_HDRINCL, &hincl, sizeof (hincl)); + if (ret < 0) + { + if ( ospfd_privs.change (ZPRIVS_LOWER) ) + zlog_err ("ospf_sock_init: could not lower privs, %s", + strerror (errno) ); + zlog_warn ("Can't set IP_HDRINCL option"); + } +#elif defined (IPTOS_PREC_INTERNETCONTROL) +#warning "IP_HDRINCL not available on this system" +#warning "using IPTOS_PREC_INTERNETCONTROL" /* Set precedence field. */ -#ifdef IPTOS_PREC_INTERNETCONTROL tos = IPTOS_PREC_INTERNETCONTROL; ret = setsockopt (ospf_sock, IPPROTO_IP, IP_TOS, (char *) &tos, sizeof (int)); @@ -185,17 +196,10 @@ ospf_sock_init (void) close (ospf_sock); /* Prevent sd leak. */ return ret; } -#endif /* IPTOS_PREC_INTERNETCONTROL */ - - /* we will include IP header with packet */ - ret = setsockopt (ospf_sock, IPPROTO_IP, IP_HDRINCL, &hincl, sizeof (hincl)); - if (ret < 0) - { - if ( ospfd_privs.change (ZPRIVS_LOWER) ) - zlog_err ("ospf_sock_init: could not lower privs, %s", - strerror (errno) ); - zlog_warn ("Can't set IP_HDRINCL option"); - } +#else /* !IPTOS_PREC_INTERNETCONTROL */ +#warning "IP_HDRINCL not available, nor is IPTOS_PREC_INTERNETCONTROL" + zlog_warn ("IP_HDRINCL option not available"); +#endif /* IP_HDRINCL */ #if defined (IP_PKTINFO) ret = setsockopt (ospf_sock, IPPROTO_IP, IP_PKTINFO, &hincl, sizeof (hincl)); |