#include <sys/ioctl.h>
#include <netinet/in.h>
#include <arpa/inet.h>
-#if defined(__GLIBC__) && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1))
#include <net/if.h>
#include <net/if_arp.h>
-#else
-#include <linux/if.h>
-#include <linux/if_arp.h>
-#endif
+/* We only care about linux/if_tunnel.h. Unfortunately, older Linux headers
+ * (pre linux-4.8) did not include all the proper headers leading to missing
+ * structs and types.
+ */
#include <linux/types.h>
+#include <linux/ip.h>
#include <linux/if_tunnel.h>
#include "config.h"
return do_add_ioctl(cmd, "gre0", &p);
case IPPROTO_IPV6:
return do_add_ioctl(cmd, "sit0", &p);
- default:
+ default:
fprintf(stderr, _("cannot determine tunnel mode (ipip, gre or sit)\n"));
return -1;
}
return -1;
switch (p.iph.protocol) {
- case IPPROTO_IPIP:
+ case IPPROTO_IPIP:
return do_del_ioctl(p.name[0] ? p.name : "tunl0", &p);
- case IPPROTO_GRE:
+ case IPPROTO_GRE:
return do_del_ioctl(p.name[0] ? p.name : "gre0", &p);
- case IPPROTO_IPV6:
+ case IPPROTO_IPV6:
return do_del_ioctl(p.name[0] ? p.name : "sit0", &p);
- default:
+ default:
return do_del_ioctl(p.name, &p);
}
return -1;
return -1;
switch (p.iph.protocol) {
- case IPPROTO_IPIP:
+ case IPPROTO_IPIP:
err = do_get_ioctl(p.name[0] ? p.name : "tunl0", &p);
break;
case IPPROTO_GRE:
basename = argv[0];
else
basename++;
-
+
while (argc > 1) {
if (argv[1][0] != '-')
break;