+/*
+ * sif6defaultroute - assign a default route through the address given.
+ */
+int
+sif6defaultroute(u, l, g)
+ int u;
+ eui64_t l, g;
+{
+ struct rtentry rt;
+
+#if defined(__USLC__)
+ g = l; /* use the local address as gateway */
+#endif
+ memset(&rt, 0, sizeof(rt));
+ memset(&rt.rtmsg_dst, 0, sizeof(rt.rtmsg_dst));
+ rt.rtmsg_dst_len = 0;
+ IN6A_LLADDR_FROM_EUI64(&rt.rtmsg_gateway, g);
+ rt.rtmsg_flags = RTF_GATEWAY;
+
+ if (ioctl(ip6fd, SIOCADDRT, &rt) < 0) {
+ error("Can't add default route: %m");
+ return 0;
+ }
+
+ default_route_gateway6 = g;
+ return 1;
+}
+
+/*
+ * cif6defaultroute - delete a default route through the address given.
+ */
+int
+cif6defaultroute(u, l, g)
+ int u;
+ eui64_t l, g;
+{
+ struct rtentry rt;
+
+#if defined(__USLC__)
+ g = l; /* use the local address as gateway */
+#endif
+ memset(&rt, 0, sizeof(rt));
+ memset(&rt.rtmsg_dst, 0, sizeof(rt.rtmsg_dst));
+ rt.rtmsg_dst_len = 0;
+ IN6A_LLADDR_FROM_EUI64(&rt.rtmsg_gateway, g);
+ rt.rtmsg_flags = RTF_GATEWAY;
+
+ if (ioctl(ip6fd, SIOCDELRT, &rt) < 0) {
+ error("Can't delete default route: %m");
+ return 0;
+ }
+
+ default_route_gateway6 = 0;
+ return 1;
+}
+