summaryrefslogtreecommitdiffstats
path: root/lib/sockopt.c
diff options
context:
space:
mode:
authorpaul <paul>2004-10-05 16:33:43 +0200
committerpaul <paul>2004-10-05 16:33:43 +0200
commit96e27c9928b5078526f2a7564700dbdafe2c8d42 (patch)
tree5697279fc355244f385da4fbf6e313feb215f06a /lib/sockopt.c
parentEven my time is limited :). (diff)
downloadfrr-96e27c9928b5078526f2a7564700dbdafe2c8d42.tar.xz
frr-96e27c9928b5078526f2a7564700dbdafe2c8d42.zip
2004-10-05 Paul Jakma <paul@dishone.st>
* sockopt.{c,h}: add sockopt_iphdrincl_swab_{htosys,systoh}, functions to change byte order between system IP_HDRINCL order and host order.
Diffstat (limited to 'lib/sockopt.c')
-rw-r--r--lib/sockopt.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/sockopt.c b/lib/sockopt.c
index 1a7524b5d..5936d6610 100644
--- a/lib/sockopt.c
+++ b/lib/sockopt.c
@@ -360,3 +360,29 @@ getsockopt_ifindex (int af, struct msghdr *msgh)
return (ifindex = 0);
}
}
+
+/* swab iph between order system uses for IP_HDRINCL and host order */
+void
+sockopt_iphdrincl_swab_htosys (struct ip *iph)
+{
+ /* BSD and derived take iph in network order, except for
+ * ip_len and ip_off
+ */
+#ifndef HAVE_IP_HDRINCL_BSD_ORDER
+ iph->ip_len = htons(iph->ip_len);
+ iph->ip_off = htons(iph->ip_off);
+#endif /* HAVE_IP_HDRINCL_BSD_ORDER */
+
+ iph->ip_id = htons(iph->ip_id);
+}
+
+void
+sockopt_iphdrincl_swab_systoh (struct ip *iph)
+{
+#ifndef HAVE_IP_HDRINCL_BSD_ORDER
+ iph->ip_len = ntohs(iph->ip_len);
+ iph->ip_off = ntohs(iph->ip_off);
+#endif /* HAVE_IP_HDRINCL_BSD_ORDER */
+
+ iph->ip_id = ntohs(iph->ip_id);
+}