-int supmedia = 0;
-int listcloners = 0;
-
-#ifdef INET6
-char addr_buf[MAXHOSTNAMELEN *2 + 1]; /*for getnameinfo()*/
-#endif
-
-void Perror __P((const char *cmd));
-
-int ifconfig __P((int argc, char *const *argv, const struct afswtch *afp));
-void notealias __P((const char *, int, int, const struct afswtch *afp));
-void printb __P((const char *s, unsigned value, const char *bits));
-void rt_xaddrs __P((caddr_t, caddr_t, struct rt_addrinfo *));
-void status __P((const struct afswtch *afp, int addrcount,
- struct sockaddr_dl *sdl, struct if_msghdr *ifm,
- struct ifa_msghdr *ifam));
-void tunnel_status __P((int s));
-void usage __P((void));
-
-#ifdef INET6
-void in6_fillscopeid __P((struct sockaddr_in6 *sin6));
-int prefix __P((void *, int));
-static char *sec2str __P((time_t));
-int explicit_prefix = 0;
-#endif
-
-typedef void c_func __P((const char *cmd, int arg, int s, const struct afswtch *afp));
-typedef void c_func2 __P((const char *arg, const char *arg2, int s, const struct afswtch *afp));
-c_func setifaddr, setifbroadaddr, setifdstaddr, setifnetmask;
-c_func2 settunnel;
-c_func deletetunnel;
-#ifdef INET6
-c_func setifprefixlen;
-c_func setip6flags;
-c_func setip6pltime;
-c_func setip6vltime;
-c_func2 setip6lifetime;
-#endif
-c_func setifipdst;
-c_func setifflags, setifmetric, setifmtu, setiflladdr;
-c_func clone_destroy;
-
-
-void clone_create(void);
-#define NEXTARG 0xffffff
-#define NEXTARG2 0xfffffe
-
-const
-struct cmd {
- const char *c_name;
- int c_parameter; /* NEXTARG means next argv */
- void (*c_func) __P((const char *, int, int, const struct afswtch *afp));
- void (*c_func2) __P((const char *, const char *, int, const struct afswtch *afp));
-} cmds[] = {
- { "up", IFF_UP, setifflags } ,
- { "down", -IFF_UP, setifflags },
- { "arp", -IFF_NOARP, setifflags },
- { "-arp", IFF_NOARP, setifflags },
- { "debug", IFF_DEBUG, setifflags },
- { "-debug", -IFF_DEBUG, setifflags },
- { "add", IFF_UP, notealias },
- { "alias", IFF_UP, notealias },
- { "-alias", -IFF_UP, notealias },
- { "delete", -IFF_UP, notealias },
- { "remove", -IFF_UP, notealias },
-#ifdef notdef
-#define EN_SWABIPS 0x1000
- { "swabips", EN_SWABIPS, setifflags },
- { "-swabips", -EN_SWABIPS, setifflags },
-#endif
- { "netmask", NEXTARG, setifnetmask },
-#ifdef INET6
- { "prefixlen", NEXTARG, setifprefixlen },
- { "anycast", IN6_IFF_ANYCAST, setip6flags },
- { "tentative", IN6_IFF_TENTATIVE, setip6flags },
- { "-tentative", -IN6_IFF_TENTATIVE, setip6flags },
- { "deprecated", IN6_IFF_DEPRECATED, setip6flags },
- { "-deprecated", -IN6_IFF_DEPRECATED, setip6flags },
- { "autoconf", IN6_IFF_AUTOCONF, setip6flags },
- { "-autoconf", -IN6_IFF_AUTOCONF, setip6flags },
- { "pltime", NEXTARG, setip6pltime },
- { "vltime", NEXTARG, setip6vltime },
-#endif
- { "metric", NEXTARG, setifmetric },
- { "broadcast", NEXTARG, setifbroadaddr },
- { "ipdst", NEXTARG, setifipdst },
- { "tunnel", NEXTARG2, NULL, settunnel },
- { "deletetunnel", 0, deletetunnel },
- { "link0", IFF_LINK0, setifflags },
- { "-link0", -IFF_LINK0, setifflags },
- { "link1", IFF_LINK1, setifflags },
- { "-link1", -IFF_LINK1, setifflags },
- { "link2", IFF_LINK2, setifflags },
- { "-link2", -IFF_LINK2, setifflags },
-#if USE_IF_MEDIA
- { "media", NEXTARG, setmedia },
- { "mediaopt", NEXTARG, setmediaopt },
- { "-mediaopt", NEXTARG, unsetmediaopt },
-#endif
-#ifdef USE_VLANS
- { "vlan", NEXTARG, setvlantag },
- { "vlandev", NEXTARG, setvlandev },
- { "-vlandev", NEXTARG, unsetvlandev },
-#endif
-#ifdef USE_BONDS
- { "bonddev", NEXTARG, setbonddev },
- { "-bonddev", NEXTARG, unsetbonddev },
-#endif
-#if 0
- /* XXX `create' special-cased below */
- {"create", 0, clone_create },
- {"plumb", 0, clone_create },
-#endif
- {"destroy", 0, clone_destroy },
- {"unplumb", 0, clone_destroy },
-#ifdef USE_IEEE80211
- { "ssid", NEXTARG, set80211ssid },
- { "nwid", NEXTARG, set80211ssid },
- { "stationname", NEXTARG, set80211stationname },
- { "station", NEXTARG, set80211stationname }, /* BSD/OS */
- { "channel", NEXTARG, set80211channel },
- { "authmode", NEXTARG, set80211authmode },
- { "powersavemode", NEXTARG, set80211powersavemode },
- { "powersave", 1, set80211powersave },
- { "-powersave", 0, set80211powersave },
- { "powersavesleep", NEXTARG, set80211powersavesleep },
- { "wepmode", NEXTARG, set80211wepmode },
- { "wep", 1, set80211wep },
- { "-wep", 0, set80211wep },
- { "weptxkey", NEXTARG, set80211weptxkey },
- { "wepkey", NEXTARG, set80211wepkey },
- { "nwkey", NEXTARG, set80211nwkey }, /* NetBSD */
- { "-nwkey", 0, set80211wep }, /* NetBSD */
-#endif
- { "normal", -IFF_LINK0, setifflags },
- { "compress", IFF_LINK0, setifflags },
- { "noicmp", IFF_LINK1, setifflags },
- { "mtu", NEXTARG, setifmtu },
- { "lladdr", NEXTARG, setiflladdr },
- { 0, 0, setifaddr },
- { 0, 0, setifdstaddr },
-};
-
-/*
- * XNS support liberally adapted from code written at the University of
- * Maryland principally by James O'Toole and Chris Torek.
- */
-typedef void af_status __P((int, struct rt_addrinfo *));
-typedef void af_getaddr __P((const char *, int));
-typedef void af_getprefix __P((const char *, int));
-
-af_status in_status, at_status, ether_status;
-af_getaddr in_getaddr, at_getaddr, ether_getaddr;
-
-
-#ifdef INET6
-af_status in6_status;
-af_getaddr in6_getaddr;
-af_getprefix in6_getprefix;
-#endif /*INET6*/
-#ifdef NS
-af_status xns_status;
-af_getaddr xns_getaddr;
-#endif
-
-/* Known address families */
-const
-struct afswtch {
- const char *af_name;
- short af_af;
- af_status *af_status;
- af_getaddr *af_getaddr;
- af_getprefix *af_getprefix;
- u_long af_difaddr;
- u_long af_aifaddr;
- caddr_t af_ridreq;
- caddr_t af_addreq;
-} afs[] = {
-#define C(x) ((caddr_t) &x)
- { "inet", AF_INET, in_status, in_getaddr, NULL,
- SIOCDIFADDR, SIOCAIFADDR, C(ridreq), C(addreq) },
-#ifdef INET6
- { "inet6", AF_INET6, in6_status, in6_getaddr, in6_getprefix,
- SIOCDIFADDR_IN6, SIOCAIFADDR_IN6,
- C(in6_ridreq), C(in6_addreq) },
-#endif /*INET6*/
-#ifdef NS
- { "ns", AF_NS, xns_status, xns_getaddr, NULL,
- SIOCDIFADDR, SIOCAIFADDR, C(ridreq), C(addreq) },
-#endif
- { "ether", AF_LINK, ether_status, ether_getaddr, NULL,
- 0, SIOCSIFLLADDR, NULL, C(ridreq) },
-#if 0 /* XXX conflicts with the media command */
-#ifdef USE_IF_MEDIA
- { "media", AF_UNSPEC, media_status, NULL, NULL, }, /* XXX not real!! */
-#endif
-#ifdef USE_VLANS
- { "vlan", AF_UNSPEC, vlan_status, NULL, NULL, }, /* XXX not real!! */
-#endif
-#ifdef USE_BONDS
- { "bond", AF_UNSPEC, bond_status, NULL, NULL, }, /* XXX not real!! */
-#endif
-#ifdef USE_IEEE80211
- { "ieee80211", AF_UNSPEC, ieee80211_status, NULL, NULL, }, /* XXX not real!! */
-#endif
-#endif
- { 0, 0, 0, 0 }
-};
-
-/*
- * Expand the compacted form of addresses as returned via the
- * configuration read via sysctl().
- */
-
-#define ROUNDUP(a) \
- ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
-#define ADVANCE(x, n) (x += ROUNDUP((n)->sa_len))