int intxflags(char *ifname, int ifs, int argc, char **argv) { int set, value, flags; if (NO_ARG(argv[0])) { set = 0; argv++; argc--; } else set = 1; if (isprefix(argv[0], "autoconfprivacy")) { value = -IFXF_INET6_NOPRIVACY; } else if (isprefix(argv[0], "autoconf6")) { value = IFXF_AUTOCONF6; } else if (isprefix(argv[0], "mpls")) { value = IFXF_MPLS; } else if (isprefix(argv[0], "wol")) { value = IFXF_WOL; } else { printf("%% intxflags: Internal error\n"); return(0); } flags = get_ifxflags(ifname, ifs); if (value < 0) { if (set) { value = -value; flags &= ~value; } else { value = -value; flags |= value; } } else if (value > 0) { if (set) flags |= value; else flags &= ~value; } else { printf("%% intxflags: value internal error\n"); } set_ifxflags(ifname, ifs, flags); return(0); }
int if_checkipv6(struct dhcpcd_ctx *ctx, const struct interface *ifp, int own) { int ra; if (ifp) { #ifdef ND6_IFF_OVERRIDE_RTADV int override; #endif #ifdef ND6_IFF_IFDISABLED if (del_if_nd6_flag(ifp->name, ND6_IFF_IFDISABLED) == -1) { syslog(LOG_ERR, "%s: del_if_nd6_flag: ND6_IFF_IFDISABLED: %m", ifp->name); return -1; } #endif #ifdef ND6_IFF_PERFORMNUD if (set_if_nd6_flag(ifp->name, ND6_IFF_PERFORMNUD) == -1) { syslog(LOG_ERR, "%s: set_if_nd6_flag: ND6_IFF_PERFORMNUD: %m", ifp->name); return -1; } #endif #ifdef ND6_IFF_AUTO_LINKLOCAL if (own) { int all; all = get_if_nd6_flag(ifp->name,ND6_IFF_AUTO_LINKLOCAL); if (all == -1) syslog(LOG_ERR, "%s: get_if_nd6_flag: " "ND6_IFF_AUTO_LINKLOCAL: %m", ifp->name); else if (all != 0) { syslog(LOG_DEBUG, "%s: disabling Kernel IPv6 " "auto link-local support", ifp->name); if (del_if_nd6_flag(ifp->name, ND6_IFF_AUTO_LINKLOCAL) == -1) { syslog(LOG_ERR, "%s: del_if_nd6_flag: " "ND6_IFF_AUTO_LINKLOCAL: %m", ifp->name); return -1; } } } #endif #ifdef SIOCGIFXFLAGS set_ifxflags(ifp, own); #endif #ifdef ND6_IFF_OVERRIDE_RTADV override = get_if_nd6_flag(ifp->name, ND6_IFF_OVERRIDE_RTADV); if (override == -1) syslog(LOG_ERR, "%s: get_if_nd6_flag: ND6_IFF_OVERRIDE_RTADV: %m", ifp->name); else if (override == 0 && !own)