Hello @tech and all honorable OpenBSD Developer,

first of all, I happy about any help or helpful advice!

Based on Edd Barrett (edd@) idea[1] to develop a Network Interface
Daemon for OpenBSD, I'm currently hack on it.

My first really huge problem is similar to Edd thoughts:

"I guess this would mean moving all of the functions apart from main()
from ifconfig.c into another file (complete with header), so that we can
call them from the new ifconfigd? I'm no expert"

My first initial solution was similar. I created ifconfig.h. This diff
is just for example. It works fine with ifconfig but how can I use it
from another directory like src/usr.sbin/ifconfigd.

My first try with modify[2] PATH and -L and -I CFLAGS doesn't work. It
break with suff like this (I understand the error but I not know any
solution):


cc   -o ifconfigd parse.o log.o control.o ifconfigd.o ifconfigde.o ifconfig.o 
bioctl.o pbkdf2.o -levent -lutil
ifconfig.o(.text+0x2220): In function `usage':
: multiple definition of `usage'[1;3B
ifconfigd.o(.text+0x400): first defined here
/usr/bin/ld: Warning: size of symbol `usage' changed from 38 in ifconfigd.o to 
35 in ifconfig.o
ifconfig.o(.text+0xa440): In function `main':
: multiple definition of `main'
ifconfigd.o(.text+0x430): first defined here
/usr/bin/ld: Warning: size of symbol `main' changed from 883 in ifconfigd.o to 
1790 in ifconfig.o
bioctl.o(.text+0x1fa0): In function `usage':
: multiple definition of `usage'
ifconfigd.o(.text+0x400): first defined here
/usr/bin/ld: Warning: size of symbol `usage' changed from 35 in ifconfigd.o to 
41 in bioctl.o
bioctl.o(.text+0x1fd0): In function `main':
: multiple definition of `main'
ifconfigd.o(.text+0x430): first defined here
/usr/bin/ld: Warning: size of symbol `main' changed from 1790 in ifconfigd.o to 
1151 in bioctl.o
ifconfig.o(.text+0x6c7b): In function `getinfo':
: undefined reference to `is_bridge'
ifconfig.o(.text+0x968b): In function `status':
: undefined reference to `is_bridge'
ifconfig.o(.text+0x990a): In function `status':
: undefined reference to `bridge_status'
ifconfig.o(.text+0xaa20): In function `main':
: undefined reference to `bridge_rule'
ifconfig.o(.rodata+0x12d0): undefined reference to `bridge_add'

... (and more undefined reference to ...)

collect2: ld returned 1 exit status
*** Error code 1

[1] 
http://www.theunixzoo.co.uk/wiki/doku.php?id=edd:openbsd#network_interface_daemon_ifconfigd
[2 Makefile Section:

.PATH: ${.CURDIR} ${.CURDIR}/../../sbin/ifconfig ${.CURDIR}/../../sbin/bioctl

PROG= ifconfigd SRCS= parse.y log.c control.c ifconfigd.c ifconfigde.c
SRCS+= ifconfig.c bioctl.c pbkdf2.c

LDADD+=         -levent -lutil

MAN=            ifconfigd.8 ifconfigd.conf.5

CFLAGS+= -DINET6 -I${.CURDIR}/../bioctl -I${.CURDIR}/../../sbin/ifconfig
CFLAGS+= -L${.CURDIR}/../bioctl -L${.CURDIR}/../../sbin/ifconfig


Index: ifconfig/ifconfig.c
===================================================================
RCS file: /cvs/src/sbin/ifconfig/ifconfig.c,v
retrieving revision 1.246
diff -u -r1.246 ifconfig.c
--- ifconfig/ifconfig.c 23 Mar 2011 18:36:41 -0000      1.246
+++ ifconfig/ifconfig.c 4 May 2011 09:03:50 -0000
@@ -104,22 +104,8 @@
 #include <unistd.h>
 #include <ifaddrs.h>

-#include "brconfig.h"
-#include "pbkdf2.h"
+#include "ifconfig.h"

-struct ifreq           ifr, ridreq;
-struct in_aliasreq     in_addreq;
-#ifdef INET6
-struct in6_ifreq       ifr6;
-struct in6_ifreq       in6_ridreq;
-struct in6_aliasreq    in6_addreq;
-#endif /* INET6 */
-struct sockaddr_in     netmask;
-
-#ifndef SMALL
-struct ifaliasreq      addreq;
-struct  netrange       at_nr;          /* AppleTalk net range */
-#endif /* SMALL */

 char   name[IFNAMSIZ];
 int    flags, xflags, setaddr, setipdst, doalias;
@@ -137,440 +123,9 @@
 int    shownet80211chans;
 int    shownet80211nodes;

-void   notealias(const char *, int);
-void   setifaddr(const char *, int);
-void   setifrtlabel(const char *, int);
-void   setiflladdr(const char *, int);
-void   setifdstaddr(const char *, int);
-void   setifflags(const char *, int);
-void   setifxflags(const char *, int);
-void   setifbroadaddr(const char *, int);
-void   setifmtu(const char *, int);
-void   setifnwid(const char *, int);
-void   setifbssid(const char *, int);
-void   setifnwkey(const char *, int);
-void   setifwpa(const char *, int);
-void   setifwpaprotos(const char *, int);
-void   setifwpaakms(const char *, int);
-void   setifwpaciphers(const char *, int);
-void   setifwpagroupcipher(const char *, int);
-void   setifwpakey(const char *, int);
-void   setifchan(const char *, int);
-void   setifscan(const char *, int);
-void   setiftxpower(const char *, int);
-void   setifnwflag(const char *, int);
-void   unsetifnwflag(const char *, int);
-void   setifnetmask(const char *, int);
-void   setifprefixlen(const char *, int);
-void   setatrange(const char *, int);
-void   setatphase(const char *, int);
-void   settunnel(const char *, const char *);
-void   deletetunnel(const char *, int);
-void   settunnelinst(const char *, int);
-#ifdef INET6
-void   setia6flags(const char *, int);
-void   setia6pltime(const char *, int);
-void   setia6vltime(const char *, int);
-void   setia6lifetime(const char *, const char *);
-void   setia6eui64(const char *, int);
-void   setkeepalive(const char *, const char *);
-void   unsetkeepalive(const char *, int);
-#endif /* INET6 */
-void   checkatrange(struct sockaddr_at *);
-void   setmedia(const char *, int);
-void   setmediaopt(const char *, int);
-void   setmediamode(const char *, int);
-void   clone_create(const char *, int);
-void   clone_destroy(const char *, int);
-void   unsetmediaopt(const char *, int);
-void   setmediainst(const char *, int);
-void   settimeslot(const char *, int);
-void   timeslot_status(void);
-void   setmpelabel(const char *, int);
-void   setvlantag(const char *, int);
-void   setvlanprio(const char *, int);
-void   setvlandev(const char *, int);
-void   unsetvlandev(const char *, int);
-void   mpe_status(void);
-void   vlan_status(void);
-void   setinstance(const char *, int);
-int    main(int, char *[]);
-int    prefix(void *val, int);
-
-#ifndef SMALL
-void   getifgroups(void);
-void   carp_status(void);
-void   setcarp_advbase(const char *,int);
-void   setcarp_advskew(const char *, int);
-void   setcarppeer(const char *, int);
-void   unsetcarppeer(const char *, int);
-void   setcarp_passwd(const char *, int);
-void   setcarp_vhid(const char *, int);
-void   setcarp_state(const char *, int);
-void   setcarpdev(const char *, int);
-void   unsetcarpdev(const char *, int);
-void   setcarp_nodes(const char *, int);
-void   setcarp_balancing(const char *, int);
-void   setpfsync_syncdev(const char *, int);
-void   setpfsync_maxupd(const char *, int);
-void   unsetpfsync_syncdev(const char *, int);
-void   setpfsync_syncpeer(const char *, int);
-void   unsetpfsync_syncpeer(const char *, int);
-void   setpfsync_defer(const char *, int);
-void   pfsync_status(void);
-void   setpppoe_dev(const char *,int);
-void   setpppoe_svc(const char *,int);
-void   setpppoe_ac(const char *,int);
-void   pppoe_status(void);
-void   setspppproto(const char *, int);
-void   setspppname(const char *, int);
-void   setspppkey(const char *, int);
-void   setsppppeerproto(const char *, int);
-void   setsppppeername(const char *, int);
-void   setsppppeerkey(const char *, int);
-void   setsppppeerflag(const char *, int);
-void   unsetsppppeerflag(const char *, int);
-void   spppinfo(struct spppreq *);
-void   sppp_status(void);
-void   sppp_printproto(const char *, struct sauthreq *);
-void   settrunkport(const char *, int);
-void   unsettrunkport(const char *, int);
-void   settrunkproto(const char *, int);
-void   trunk_status(void);
-void   setifgroup(const char *, int);
-void   unsetifgroup(const char *, int);
-void   setifpriority(const char *, int);
-void   setifpowersave(const char *, int);
-void   setifmetric(const char *, int);
-void   notrailers(const char *, int);
-void   setgroupattribs(char *, int, char *[]);
-void   pflow_status(void);
-void   setpflow_sender(const char *, int);
-void   unsetpflow_sender(const char *, int);
-void   setpflow_receiver(const char *, int);
-void   unsetpflow_receiver(const char *, int);
-void   list_cloners(void);
-void   setifipdst(const char *, int);
-void   setifdesc(const char *, int);
-void   unsetifdesc(const char *, int);
-int    printgroup(char *, int);
-#else
-void   setignore(const char *, int);
-#endif
-
-/*
- * Media stuff.  Whenever a media command is first performed, the
- * currently select media is grabbed for this interface.  If `media'
- * is given, the current media word is modified.  `mediaopt' commands
- * only modify the set and clear words.  They then operate on the
- * current media word later.
- */
-int    media_current;
-int    mediaopt_set;
-int    mediaopt_clear;
-
-int    actions;                        /* Actions performed */
-
-#define        A_MEDIA         0x0001          /* media command */
-#define        A_MEDIAOPTSET   0x0002          /* mediaopt command */
-#define        A_MEDIAOPTCLR   0x0004          /* -mediaopt command */
-#define        A_MEDIAOPT      (A_MEDIAOPTSET|A_MEDIAOPTCLR)
-#define        A_MEDIAINST     0x0008          /* instance or inst command */
-#define        A_MEDIAMODE     0x0010          /* mode command */
-#define A_SILENT       0x8000000       /* doing operation, do not print */
-
-#define        NEXTARG0        0xffffff
-#define NEXTARG                0xfffffe
-#define        NEXTARG2        0xfffffd
-
-const struct   cmd {
-       char    *c_name;
-       int     c_parameter;            /* NEXTARG means next argv */
-       int     c_action;               /* defered action */
-       void    (*c_func)(const char *, int);
-       void    (*c_func2)(const char *, const char *);
-} cmds[] = {
-       { "up",         IFF_UP,         0,              setifflags } ,
-       { "down",       -IFF_UP,        0,              setifflags },
-       { "arp",        -IFF_NOARP,     0,              setifflags },
-       { "-arp",       IFF_NOARP,      0,              setifflags },
-       { "debug",      IFF_DEBUG,      0,              setifflags },
-       { "-debug",     -IFF_DEBUG,     0,              setifflags },
-       { "alias",      IFF_UP,         0,              notealias },
-       { "-alias",     -IFF_UP,        0,              notealias },
-       { "delete",     -IFF_UP,        0,              notealias },
-#ifdef notdef
-#define        EN_SWABIPS      0x1000
-       { "swabips",    EN_SWABIPS,     0,              setifflags },
-       { "-swabips",   -EN_SWABIPS,    0,              setifflags },
-#endif /* notdef */
-       { "netmask",    NEXTARG,        0,              setifnetmask },
-       { "mtu",        NEXTARG,        0,              setifmtu },
-       { "nwid",       NEXTARG,        0,              setifnwid },
-       { "-nwid",      -1,             0,              setifnwid },
-       { "bssid",      NEXTARG,        0,              setifbssid },
-       { "-bssid",     -1,             0,              setifbssid },
-       { "nwkey",      NEXTARG,        0,              setifnwkey },
-       { "-nwkey",     -1,             0,              setifnwkey },
-       { "wpa",        1,              0,              setifwpa },
-       { "-wpa",       0,              0,              setifwpa },
-       { "wpaakms",    NEXTARG,        0,              setifwpaakms },
-       { "wpaciphers", NEXTARG,        0,              setifwpaciphers },
-       { "wpagroupcipher", NEXTARG,    0,              setifwpagroupcipher },
-       { "wpaprotos",  NEXTARG,        0,              setifwpaprotos },
-       { "wpakey",     NEXTARG,        0,              setifwpakey },
-       { "-wpakey",    -1,             0,              setifwpakey },
-/*XXX delete these two after the 4.9 release */
-/*XXX*/        { "wpapsk",     NEXTARG,        0,              setifwpakey },
-/*XXX*/        { "-wpapsk",    -1,             0,              setifwpakey },
-       { "chan",       NEXTARG0,       0,              setifchan },
-       { "-chan",      -1,             0,              setifchan },
-       { "scan",       NEXTARG0,       0,              setifscan },
-       { "broadcast",  NEXTARG,        0,              setifbroadaddr },
-       { "prefixlen",  NEXTARG,        0,              setifprefixlen},
-       { "vlan",       NEXTARG,        0,              setvlantag },
-       { "vlandev",    NEXTARG,        0,              setvlandev },
-       { "-vlandev",   1,              0,              unsetvlandev },
-#ifdef INET6
-       { "anycast",    IN6_IFF_ANYCAST,        0,      setia6flags },
-       { "-anycast",   -IN6_IFF_ANYCAST,       0,      setia6flags },
-       { "tentative",  IN6_IFF_TENTATIVE,      0,      setia6flags },
-       { "-tentative", -IN6_IFF_TENTATIVE,     0,      setia6flags },
-       { "pltime",     NEXTARG,        0,              setia6pltime },
-       { "vltime",     NEXTARG,        0,              setia6vltime },
-       { "eui64",      0,              0,              setia6eui64 },
-       { "autoconfprivacy",    IFXF_INET6_PRIVACY,     0,      setifxflags },
-       { "-autoconfprivacy",   -IFXF_INET6_PRIVACY,    0,      setifxflags },
-#endif /*INET6*/
-#ifndef SMALL
-       { "group",      NEXTARG,        0,              setifgroup },
-       { "-group",     NEXTARG,        0,              unsetifgroup },
-       { "trailers",   -1,             0,              notrailers },
-       { "-trailers",  1,              0,              notrailers },
-       { "metric",     NEXTARG,        0,              setifmetric },
-       { "powersave",  NEXTARG0,       0,              setifpowersave },
-       { "-powersave", -1,             0,              setifpowersave },
-       { "priority",   NEXTARG,        0,              setifpriority },
-       { "rtlabel",    NEXTARG,        0,              setifrtlabel },
-       { "-rtlabel",   -1,             0,              setifrtlabel },
-       { "rdomain",    NEXTARG,        0,              setinstance },
-       { "range",      NEXTARG,        0,              setatrange },
-       { "phase",      NEXTARG,        0,              setatphase },
-       { "mpls",       IFXF_MPLS,      0,              setifxflags },
-       { "-mpls",      -IFXF_MPLS,     0,              setifxflags },
-       { "mplslabel",  NEXTARG,        0,              setmpelabel },
-       { "advbase",    NEXTARG,        0,              setcarp_advbase },
-       { "advskew",    NEXTARG,        0,              setcarp_advskew },
-       { "carppeer",   NEXTARG,        0,              setcarppeer },
-       { "-carppeer",  1,              0,              unsetcarppeer },
-       { "pass",       NEXTARG,        0,              setcarp_passwd },
-       { "vhid",       NEXTARG,        0,              setcarp_vhid },
-       { "vlanprio",   NEXTARG,        0,              setvlanprio },
-       { "state",      NEXTARG,        0,              setcarp_state },
-       { "carpdev",    NEXTARG,        0,              setcarpdev },
-       { "carpnodes",  NEXTARG,        0,              setcarp_nodes },
-       { "balancing",  NEXTARG,        0,              setcarp_balancing },
-       { "-carpdev",   1,              0,              unsetcarpdev },
-       { "syncdev",    NEXTARG,        0,              setpfsync_syncdev },
-       { "-syncdev",   1,              0,              unsetpfsync_syncdev },
-       { "syncif",     NEXTARG,        0,              setpfsync_syncdev },
-       { "-syncif",    1,              0,              unsetpfsync_syncdev },
-       { "syncpeer",   NEXTARG,        0,              setpfsync_syncpeer },
-       { "-syncpeer",  1,              0,              unsetpfsync_syncpeer },
-       { "maxupd",     NEXTARG,        0,              setpfsync_maxupd },
-       { "defer",      1,              0,              setpfsync_defer },
-       { "-defer",     0,              0,              setpfsync_defer },
-       /* giftunnel is for backward compat */
-       { "giftunnel",  NEXTARG2,       0,              NULL, settunnel } ,
-       { "tunnel",     NEXTARG2,       0,              NULL, settunnel } ,
-       { "deletetunnel",  0,           0,              deletetunnel } ,
-       { "tunneldomain", NEXTARG,      0,              settunnelinst } ,
-       { "pppoedev",   NEXTARG,        0,              setpppoe_dev },
-       { "pppoesvc",   NEXTARG,        0,              setpppoe_svc },
-       { "-pppoesvc",  1,              0,              setpppoe_svc },
-       { "pppoeac",    NEXTARG,        0,              setpppoe_ac },
-       { "-pppoeac",   1,              0,              setpppoe_ac },
-       { "timeslot",   NEXTARG,        0,              settimeslot },
-       { "txpower",    NEXTARG,        0,              setiftxpower },
-       { "-txpower",   1,              0,              setiftxpower },
-       { "trunkport",  NEXTARG,        0,              settrunkport },
-       { "-trunkport", NEXTARG,        0,              unsettrunkport },
-       { "trunkproto", NEXTARG,        0,              settrunkproto },
-       { "authproto",  NEXTARG,        0,              setspppproto },
-       { "authname",   NEXTARG,        0,              setspppname },
-       { "authkey",    NEXTARG,        0,              setspppkey },
-       { "peerproto",  NEXTARG,        0,              setsppppeerproto },
-       { "peername",   NEXTARG,        0,              setsppppeername },
-       { "peerkey",    NEXTARG,        0,              setsppppeerkey },
-       { "peerflag",   NEXTARG,        0,              setsppppeerflag },
-       { "-peerflag",  NEXTARG,        0,              unsetsppppeerflag },
-       { "nwflag",     NEXTARG,        0,              setifnwflag },
-       { "-nwflag",    NEXTARG,        0,              unsetifnwflag },
-       { "flowsrc",    NEXTARG,        0,              setpflow_sender },
-       { "-flowsrc",   1,              0,              unsetpflow_sender },
-       { "flowdst",    NEXTARG,        0,              setpflow_receiver },
-       { "-flowdst", 1,                0,              unsetpflow_receiver },
-       { "-inet6",     IFXF_NOINET6,   0,              setifxflags } ,
-       { "keepalive",  NEXTARG2,       0,              NULL, setkeepalive },
-       { "-keepalive", 1,              0,              unsetkeepalive },
-       { "add",        NEXTARG,        0,              bridge_add },
-       { "del",        NEXTARG,        0,              bridge_delete },
-       { "addspan",    NEXTARG,        0,              bridge_addspan },
-       { "delspan",    NEXTARG,        0,              bridge_delspan },
-       { "discover",   NEXTARG,        0,              setdiscover },
-       { "-discover",  NEXTARG,        0,              unsetdiscover },
-       { "blocknonip", NEXTARG,        0,              setblocknonip },
-       { "-blocknonip",NEXTARG,        0,              unsetblocknonip },
-       { "learn",      NEXTARG,        0,              setlearn },
-       { "-learn",     NEXTARG,        0,              unsetlearn },
-       { "stp",        NEXTARG,        0,              setstp },
-       { "-stp",       NEXTARG,        0,              unsetstp },
-       { "edge",       NEXTARG,        0,              setedge },
-       { "-edge",      NEXTARG,        0,              unsetedge },
-       { "autoedge",   NEXTARG,        0,              setautoedge },
-       { "-autoedge",  NEXTARG,        0,              unsetautoedge },
-       { "ptp",        NEXTARG,        0,              setptp },
-       { "-ptp",       NEXTARG,        0,              unsetptp },
-       { "autoptp",    NEXTARG,        0,              setautoptp },
-       { "-autoptp",   NEXTARG,        0,              unsetautoptp },
-       { "flush",      0,              0,              bridge_flush },
-       { "flushall",   0,              0,              bridge_flushall },
-       { "static",     NEXTARG2,       0,              NULL, bridge_addaddr },
-       { "deladdr",    NEXTARG,        0,              bridge_deladdr },
-       { "maxaddr",    NEXTARG,        0,              bridge_maxaddr },
-       { "addr",       0,              0,              bridge_addrs },
-       { "hellotime",  NEXTARG,        0,              bridge_hellotime },
-       { "fwddelay",   NEXTARG,        0,              bridge_fwddelay },
-       { "maxage",     NEXTARG,        0,              bridge_maxage },
-       { "proto",      NEXTARG,        0,              bridge_proto },
-       { "ifpriority", NEXTARG2,       0,              NULL, bridge_ifprio },
-       { "ifcost",     NEXTARG2,       0,              NULL, bridge_ifcost },
-       { "-ifcost",    NEXTARG,        0,              bridge_noifcost },
-       { "timeout",    NEXTARG,        0,              bridge_timeout },
-       { "holdcnt",    NEXTARG,        0,              bridge_holdcnt },
-       { "spanpriority", NEXTARG,      0,              bridge_priority },
-       { "ipdst",      NEXTARG,        0,              setifipdst },
-#if 0
-       /* XXX `rule` special-cased below */
-       { "rule",       0,              0,              bridge_rule },
-#endif
-       { "rules",      NEXTARG,        0,              bridge_rules },
-       { "rulefile",   NEXTARG,        0,              bridge_rulefile },
-       { "flushrule",  NEXTARG,        0,              bridge_flushrule },
-       { "description", NEXTARG,       0,              setifdesc },
-       { "descr",      NEXTARG,        0,              setifdesc },
-       { "-description", 1,            0,              unsetifdesc },
-       { "-descr",     1,              0,              unsetifdesc },
-       { "wol",        IFXF_WOL,       0,              setifxflags },
-       { "-wol",       -IFXF_WOL,      0,              setifxflags },
-#else /* SMALL */
-       { "group",      NEXTARG,        0,              setignore },
-       { "powersave",  NEXTARG0,       0,              setignore },
-       { "priority",   NEXTARG,        0,              setignore },
-       { "rtlabel",    NEXTARG,        0,              setignore },
-       { "mpls",       IFXF_MPLS,      0,              setignore },
-       { "vlanprio",   NEXTARG,        0,              setignore },
-       { "txpower",    NEXTARG,        0,              setignore },
-       { "nwflag",     NEXTARG,        0,              setignore },
-       { "rdomain",    NEXTARG,        0,              setignore },
-       { "-inet6",     IFXF_NOINET6,   0,              setignore } ,
-       { "description", NEXTARG,       0,              setignore },
-       { "descr",      NEXTARG,        0,              setignore },
-       { "wol",        IFXF_WOL,       0,              setignore },
-       { "-wol",       -IFXF_WOL,      0,              setignore },
-#endif /* SMALL */
-#if 0
-       /* XXX `create' special-cased below */
-       { "create",     0,              0,              clone_create } ,
-#endif
-       { "destroy",    0,              0,              clone_destroy } ,
-       { "link0",      IFF_LINK0,      0,              setifflags } ,
-       { "-link0",     -IFF_LINK0,     0,              setifflags } ,
-       { "link1",      IFF_LINK1,      0,              setifflags } ,
-       { "-link1",     -IFF_LINK1,     0,              setifflags } ,
-       { "link2",      IFF_LINK2,      0,              setifflags } ,
-       { "-link2",     -IFF_LINK2,     0,              setifflags } ,
-       { "media",      NEXTARG0,       A_MEDIA,        setmedia },
-       { "mediaopt",   NEXTARG,        A_MEDIAOPTSET,  setmediaopt },
-       { "-mediaopt",  NEXTARG,        A_MEDIAOPTCLR,  unsetmediaopt },
-       { "mode",       NEXTARG,        A_MEDIAMODE,    setmediamode },
-       { "instance",   NEXTARG,        A_MEDIAINST,    setmediainst },
-       { "inst",       NEXTARG,        A_MEDIAINST,    setmediainst },
-       { "lladdr",     NEXTARG,        0,              setiflladdr },
-       { NULL, /*src*/ 0,              0,              setifaddr },
-       { NULL, /*dst*/ 0,              0,              setifdstaddr },
-       { NULL, /*illegal*/0,           0,              NULL },
-};
-
-int    getinfo(struct ifreq *, int);
-void   getsock(int);
-void   printgroupattribs(char *);
-void   printif(char *, int);
-void   printb_status(unsigned short, char *);
-const char *get_linkstate(int, int);
-void   status(int, struct sockaddr_dl *, int);
+/*NOT in ifconfig.h because everbody use it */
 void   usage(int);
-const char *get_string(const char *, const char *, u_int8_t *, int *);
-void   print_string(const u_int8_t *, int);
-char   *sec2str(time_t);
-
-const char *get_media_type_string(int);
-const char *get_media_subtype_string(int);
-int    get_media_mode(int, const char *);
-int    get_media_subtype(int, const char *);
-int    get_media_options(int, const char *);
-int    lookup_media_word(const struct ifmedia_description *, int,
-           const char *);
-void   print_media_word(int, int, int);
-void   process_media_commands(void);
-void   init_current_media(void);
-
-unsigned long get_ts_map(int, int, int);
-
-void   in_status(int);
-void   in_getaddr(const char *, int);
-void   in_getprefix(const char *, int);
-#ifdef INET6
-void   in6_fillscopeid(struct sockaddr_in6 *sin6);
-void   in6_alias(struct in6_ifreq *);
-void   in6_status(int);
-void   in6_getaddr(const char *, int);
-void   in6_getprefix(const char *, int);
-#endif /* INET6 */
-void    at_status(int);
-void    at_getaddr(const char *, int);
-void   ieee80211_status(void);
-void   ieee80211_listchans(void);
-void   ieee80211_listnodes(void);
-void   ieee80211_printnode(struct ieee80211_nodereq *);
-
-/* Known address families */
-const struct afswtch {
-       char *af_name;
-       short af_af;
-       void (*af_status)(int);
-       void (*af_getaddr)(const char *, int);
-       void (*af_getprefix)(const char *, int);
-       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, in_getprefix,
-           SIOCDIFADDR, SIOCAIFADDR, C(ridreq), C(in_addreq) },
-#ifdef INET6
-       { "inet6", AF_INET6, in6_status, in6_getaddr, in6_getprefix,
-           SIOCDIFADDR_IN6, SIOCAIFADDR_IN6, C(in6_ridreq), C(in6_addreq) },
-#endif /* INET6 */
-#ifndef SMALL
-       { "atalk", AF_APPLETALK, at_status, at_getaddr, NULL,
-           SIOCDIFADDR, SIOCAIFADDR, C(addreq), C(addreq) },
-#endif
-       { 0,    0,          0,          0 }
-};

-const struct afswtch *afp;     /*the address family being set or asked about*/

 int ifaliases = 0;
 int aflag = 0;
Index: ifconfig/ifconfig.h
===================================================================
RCS file: ifconfig/ifconfig.h
diff -N ifconfig/ifconfig.h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ ifconfig/ifconfig.h 4 May 2011 09:03:50 -0000
@@ -0,0 +1,529 @@
+/*
+ * Copyright (c) 2011 Rafael Sadowski <raf...@sizeofvoid.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
+ * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+#ifndef _IFCONFIG_H_
+#define _IFCONFIG_H_
+
+#include <sys/param.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_media.h>
+#include <net/if_types.h>
+#include <netinet/in.h>
+#include <netinet/in_var.h>
+#include <netinet6/nd6.h>
+#include <arpa/inet.h>
+#include <netinet/ip_ipsp.h>
+#include <netinet/if_ether.h>
+#include <net/if_enc.h>
+#include <net80211/ieee80211.h>
+#include <net80211/ieee80211_ioctl.h>
+#include <net/pfvar.h>
+#include <net/if_pfsync.h>
+#include <net/if_pflow.h>
+#include <net/if_pppoe.h>
+#include <net/if_trunk.h>
+#include <net/if_sppp.h>
+#include <net/ppp_defs.h>
+
+#include <netatalk/at.h>
+
+#include <netinet/ip_carp.h>
+
+#include <netdb.h>
+
+#include <net/if_vlan_var.h>
+
+#include <netmpls/mpls.h>
+
+#include <ctype.h>
+#include <err.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <ifaddrs.h>
+
+#include "brconfig.h"
+
+/*
+#include <sys/param.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+
+#include <netinet6/in6_var.h>
+#include <net80211/ieee80211.h>
+#include <net80211/ieee80211_ioctl.h>
+
+#include <net/if_sppp.h>
+
+#include <netatalk/at.h>
+#include <net/if_media.h>
+
+#include "brconfig.h"
+#include "pbkdf2.h"
+*/
+struct ifreq           ifr, ridreq;
+struct in_aliasreq     in_addreq;
+#ifdef INET6
+struct in6_ifreq       ifr6;
+struct in6_ifreq       in6_ridreq;
+struct in6_aliasreq    in6_addreq;
+#endif /* INET6 */
+struct sockaddr_in     netmask;
+
+#ifndef SMALL
+struct ifaliasreq      addreq;
+struct  netrange       at_nr;          /* AppleTalk net range */
+#endif /* SMALL */
+
+void   notealias(const char *, int);
+void   setifaddr(const char *, int);
+void   setifrtlabel(const char *, int);
+void   setiflladdr(const char *, int);
+void   setifdstaddr(const char *, int);
+void   setifflags(const char *, int);
+void   setifxflags(const char *, int);
+void   setifbroadaddr(const char *, int);
+void   setifmtu(const char *, int);
+void   setifnwid(const char *, int);
+void   setifbssid(const char *, int);
+void   setifnwkey(const char *, int);
+void   setifwpa(const char *, int);
+void   setifwpaprotos(const char *, int);
+void   setifwpaakms(const char *, int);
+void   setifwpaciphers(const char *, int);
+void   setifwpagroupcipher(const char *, int);
+void   setifwpakey(const char *, int);
+void   setifchan(const char *, int);
+void   setifscan(const char *, int);
+void   setiftxpower(const char *, int);
+void   setifnwflag(const char *, int);
+void   unsetifnwflag(const char *, int);
+void   setifnetmask(const char *, int);
+void   setifprefixlen(const char *, int);
+void   setatrange(const char *, int);
+void   setatphase(const char *, int);
+void   settunnel(const char *, const char *);
+void   deletetunnel(const char *, int);
+void   settunnelinst(const char *, int);
+#ifdef INET6
+void   setia6flags(const char *, int);
+void   setia6pltime(const char *, int);
+void   setia6vltime(const char *, int);
+void   setia6lifetime(const char *, const char *);
+void   setia6eui64(const char *, int);
+void   setkeepalive(const char *, const char *);
+void   unsetkeepalive(const char *, int);
+#endif /* INET6 */
+void   checkatrange(struct sockaddr_at *);
+void   setmedia(const char *, int);
+void   setmediaopt(const char *, int);
+void   setmediamode(const char *, int);
+void   clone_create(const char *, int);
+void   clone_destroy(const char *, int);
+void   unsetmediaopt(const char *, int);
+void   setmediainst(const char *, int);
+void   settimeslot(const char *, int);
+void   timeslot_status(void);
+void   setmpelabel(const char *, int);
+void   setvlantag(const char *, int);
+void   setvlanprio(const char *, int);
+void   setvlandev(const char *, int);
+void   unsetvlandev(const char *, int);
+void   mpe_status(void);
+void   vlan_status(void);
+void   setinstance(const char *, int);
+int    main(int, char *[]);
+int    prefix(void *val, int);
+
+#ifndef SMALL
+void   getifgroups(void);
+void   carp_status(void);
+void   setcarp_advbase(const char *,int);
+void   setcarp_advskew(const char *, int);
+void   setcarppeer(const char *, int);
+void   unsetcarppeer(const char *, int);
+void   setcarp_passwd(const char *, int);
+void   setcarp_vhid(const char *, int);
+void   setcarp_state(const char *, int);
+void   setcarpdev(const char *, int);
+void   unsetcarpdev(const char *, int);
+void   setcarp_nodes(const char *, int);
+void   setcarp_balancing(const char *, int);
+void   setpfsync_syncdev(const char *, int);
+void   setpfsync_maxupd(const char *, int);
+void   unsetpfsync_syncdev(const char *, int);
+void   setpfsync_syncpeer(const char *, int);
+void   unsetpfsync_syncpeer(const char *, int);
+void   setpfsync_defer(const char *, int);
+void   pfsync_status(void);
+void   setpppoe_dev(const char *,int);
+void   setpppoe_svc(const char *,int);
+void   setpppoe_ac(const char *,int);
+void   pppoe_status(void);
+void   setspppproto(const char *, int);
+void   setspppname(const char *, int);
+void   setspppkey(const char *, int);
+void   setsppppeerproto(const char *, int);
+void   setsppppeername(const char *, int);
+void   setsppppeerkey(const char *, int);
+void   setsppppeerflag(const char *, int);
+void   unsetsppppeerflag(const char *, int);
+void   spppinfo(struct spppreq *);
+void   sppp_status(void);
+void   sppp_printproto(const char *, struct sauthreq *);
+void   settrunkport(const char *, int);
+void   unsettrunkport(const char *, int);
+void   settrunkproto(const char *, int);
+void   trunk_status(void);
+void   setifgroup(const char *, int);
+void   unsetifgroup(const char *, int);
+void   setifpriority(const char *, int);
+void   setifpowersave(const char *, int);
+void   setifmetric(const char *, int);
+void   notrailers(const char *, int);
+void   setgroupattribs(char *, int, char *[]);
+void   pflow_status(void);
+void   setpflow_sender(const char *, int);
+void   unsetpflow_sender(const char *, int);
+void   setpflow_receiver(const char *, int);
+void   unsetpflow_receiver(const char *, int);
+void   list_cloners(void);
+void   setifipdst(const char *, int);
+void   setifdesc(const char *, int);
+void   unsetifdesc(const char *, int);
+int    printgroup(char *, int);
+#else
+void   setignore(const char *, int);
+#endif
+
+/*
+ * Media stuff.  Whenever a media command is first performed, the
+ * currently select media is grabbed for this interface.  If `media'
+ * is given, the current media word is modified.  `mediaopt' commands
+ * only modify the set and clear words.  They then operate on the
+ * current media word later.
+ */
+int    media_current;
+int    mediaopt_set;
+int    mediaopt_clear;
+
+int    actions;                        /* Actions performed */
+
+#define        A_MEDIA         0x0001          /* media command */
+#define        A_MEDIAOPTSET   0x0002          /* mediaopt command */
+#define        A_MEDIAOPTCLR   0x0004          /* -mediaopt command */
+#define        A_MEDIAOPT      (A_MEDIAOPTSET|A_MEDIAOPTCLR)
+#define        A_MEDIAINST     0x0008          /* instance or inst command */
+#define        A_MEDIAMODE     0x0010          /* mode command */
+#define A_SILENT       0x8000000       /* doing operation, do not print */
+
+#define        NEXTARG0        0xffffff
+#define NEXTARG                0xfffffe
+#define        NEXTARG2        0xfffffd
+
+const struct   cmd {
+       char    *c_name;
+       int     c_parameter;            /* NEXTARG means next argv */
+       int     c_action;               /* defered action */
+       void    (*c_func)(const char *, int);
+       void    (*c_func2)(const char *, const char *);
+} cmds[] = {
+       { "up",         IFF_UP,         0,              setifflags } ,
+       { "down",       -IFF_UP,        0,              setifflags },
+       { "arp",        -IFF_NOARP,     0,              setifflags },
+       { "-arp",       IFF_NOARP,      0,              setifflags },
+       { "debug",      IFF_DEBUG,      0,              setifflags },
+       { "-debug",     -IFF_DEBUG,     0,              setifflags },
+       { "alias",      IFF_UP,         0,              notealias },
+       { "-alias",     -IFF_UP,        0,              notealias },
+       { "delete",     -IFF_UP,        0,              notealias },
+#ifdef notdef
+#define        EN_SWABIPS      0x1000
+       { "swabips",    EN_SWABIPS,     0,              setifflags },
+       { "-swabips",   -EN_SWABIPS,    0,              setifflags },
+#endif /* notdef */
+       { "netmask",    NEXTARG,        0,              setifnetmask },
+       { "mtu",        NEXTARG,        0,              setifmtu },
+       { "nwid",       NEXTARG,        0,              setifnwid },
+       { "-nwid",      -1,             0,              setifnwid },
+       { "bssid",      NEXTARG,        0,              setifbssid },
+       { "-bssid",     -1,             0,              setifbssid },
+       { "nwkey",      NEXTARG,        0,              setifnwkey },
+       { "-nwkey",     -1,             0,              setifnwkey },
+       { "wpa",        1,              0,              setifwpa },
+       { "-wpa",       0,              0,              setifwpa },
+       { "wpaakms",    NEXTARG,        0,              setifwpaakms },
+       { "wpaciphers", NEXTARG,        0,              setifwpaciphers },
+       { "wpagroupcipher", NEXTARG,    0,              setifwpagroupcipher },
+       { "wpaprotos",  NEXTARG,        0,              setifwpaprotos },
+       { "wpakey",     NEXTARG,        0,              setifwpakey },
+       { "-wpakey",    -1,             0,              setifwpakey },
+/*XXX delete these two after the 4.9 release */
+/*XXX*/        { "wpapsk",     NEXTARG,        0,              setifwpakey },
+/*XXX*/        { "-wpapsk",    -1,             0,              setifwpakey },
+       { "chan",       NEXTARG0,       0,              setifchan },
+       { "-chan",      -1,             0,              setifchan },
+       { "scan",       NEXTARG0,       0,              setifscan },
+       { "broadcast",  NEXTARG,        0,              setifbroadaddr },
+       { "prefixlen",  NEXTARG,        0,              setifprefixlen},
+       { "vlan",       NEXTARG,        0,              setvlantag },
+       { "vlandev",    NEXTARG,        0,              setvlandev },
+       { "-vlandev",   1,              0,              unsetvlandev },
+#ifdef INET6
+       { "anycast",    IN6_IFF_ANYCAST,        0,      setia6flags },
+       { "-anycast",   -IN6_IFF_ANYCAST,       0,      setia6flags },
+       { "tentative",  IN6_IFF_TENTATIVE,      0,      setia6flags },
+       { "-tentative", -IN6_IFF_TENTATIVE,     0,      setia6flags },
+       { "pltime",     NEXTARG,        0,              setia6pltime },
+       { "vltime",     NEXTARG,        0,              setia6vltime },
+       { "eui64",      0,              0,              setia6eui64 },
+       { "autoconfprivacy",    IFXF_INET6_PRIVACY,     0,      setifxflags },
+       { "-autoconfprivacy",   -IFXF_INET6_PRIVACY,    0,      setifxflags },
+       { "keepalive",  NEXTARG2,       0,              NULL, setkeepalive },
+       { "-keepalive", 1,              0,              unsetkeepalive },
+#endif /*INET6*/
+#ifndef SMALL
+       { "group",      NEXTARG,        0,              setifgroup },
+       { "-group",     NEXTARG,        0,              unsetifgroup },
+       { "trailers",   -1,             0,              notrailers },
+       { "-trailers",  1,              0,              notrailers },
+       { "metric",     NEXTARG,        0,              setifmetric },
+       { "powersave",  NEXTARG0,       0,              setifpowersave },
+       { "-powersave", -1,             0,              setifpowersave },
+       { "priority",   NEXTARG,        0,              setifpriority },
+       { "rtlabel",    NEXTARG,        0,              setifrtlabel },
+       { "-rtlabel",   -1,             0,              setifrtlabel },
+       { "rdomain",    NEXTARG,        0,              setinstance },
+       { "range",      NEXTARG,        0,              setatrange },
+       { "phase",      NEXTARG,        0,              setatphase },
+       { "mpls",       IFXF_MPLS,      0,              setifxflags },
+       { "-mpls",      -IFXF_MPLS,     0,              setifxflags },
+       { "mplslabel",  NEXTARG,        0,              setmpelabel },
+       { "advbase",    NEXTARG,        0,              setcarp_advbase },
+       { "advskew",    NEXTARG,        0,              setcarp_advskew },
+       { "carppeer",   NEXTARG,        0,              setcarppeer },
+       { "-carppeer",  1,              0,              unsetcarppeer },
+       { "pass",       NEXTARG,        0,              setcarp_passwd },
+       { "vhid",       NEXTARG,        0,              setcarp_vhid },
+       { "vlanprio",   NEXTARG,        0,              setvlanprio },
+       { "state",      NEXTARG,        0,              setcarp_state },
+       { "carpdev",    NEXTARG,        0,              setcarpdev },
+       { "carpnodes",  NEXTARG,        0,              setcarp_nodes },
+       { "balancing",  NEXTARG,        0,              setcarp_balancing },
+       { "-carpdev",   1,              0,              unsetcarpdev },
+       { "syncdev",    NEXTARG,        0,              setpfsync_syncdev },
+       { "-syncdev",   1,              0,              unsetpfsync_syncdev },
+       { "syncif",     NEXTARG,        0,              setpfsync_syncdev },
+       { "-syncif",    1,              0,              unsetpfsync_syncdev },
+       { "syncpeer",   NEXTARG,        0,              setpfsync_syncpeer },
+       { "-syncpeer",  1,              0,              unsetpfsync_syncpeer },
+       { "maxupd",     NEXTARG,        0,              setpfsync_maxupd },
+       { "defer",      1,              0,              setpfsync_defer },
+       { "-defer",     0,              0,              setpfsync_defer },
+       /* giftunnel is for backward compat */
+       { "giftunnel",  NEXTARG2,       0,              NULL, settunnel } ,
+       { "tunnel",     NEXTARG2,       0,              NULL, settunnel } ,
+       { "deletetunnel",  0,           0,              deletetunnel } ,
+       { "tunneldomain", NEXTARG,      0,              settunnelinst } ,
+       { "pppoedev",   NEXTARG,        0,              setpppoe_dev },
+       { "pppoesvc",   NEXTARG,        0,              setpppoe_svc },
+       { "-pppoesvc",  1,              0,              setpppoe_svc },
+       { "pppoeac",    NEXTARG,        0,              setpppoe_ac },
+       { "-pppoeac",   1,              0,              setpppoe_ac },
+       { "timeslot",   NEXTARG,        0,              settimeslot },
+       { "txpower",    NEXTARG,        0,              setiftxpower },
+       { "-txpower",   1,              0,              setiftxpower },
+       { "trunkport",  NEXTARG,        0,              settrunkport },
+       { "-trunkport", NEXTARG,        0,              unsettrunkport },
+       { "trunkproto", NEXTARG,        0,              settrunkproto },
+       { "authproto",  NEXTARG,        0,              setspppproto },
+       { "authname",   NEXTARG,        0,              setspppname },
+       { "authkey",    NEXTARG,        0,              setspppkey },
+       { "peerproto",  NEXTARG,        0,              setsppppeerproto },
+       { "peername",   NEXTARG,        0,              setsppppeername },
+       { "peerkey",    NEXTARG,        0,              setsppppeerkey },
+       { "peerflag",   NEXTARG,        0,              setsppppeerflag },
+       { "-peerflag",  NEXTARG,        0,              unsetsppppeerflag },
+       { "nwflag",     NEXTARG,        0,              setifnwflag },
+       { "-nwflag",    NEXTARG,        0,              unsetifnwflag },
+       { "flowsrc",    NEXTARG,        0,              setpflow_sender },
+       { "-flowsrc",   1,              0,              unsetpflow_sender },
+       { "flowdst",    NEXTARG,        0,              setpflow_receiver },
+       { "-flowdst", 1,                0,              unsetpflow_receiver },
+       { "-inet6",     IFXF_NOINET6,   0,              setifxflags } ,
+       { "add",        NEXTARG,        0,              bridge_add },
+       { "del",        NEXTARG,        0,              bridge_delete },
+       { "addspan",    NEXTARG,        0,              bridge_addspan },
+       { "delspan",    NEXTARG,        0,              bridge_delspan },
+       { "discover",   NEXTARG,        0,              setdiscover },
+       { "-discover",  NEXTARG,        0,              unsetdiscover },
+       { "blocknonip", NEXTARG,        0,              setblocknonip },
+       { "-blocknonip",NEXTARG,        0,              unsetblocknonip },
+       { "learn",      NEXTARG,        0,              setlearn },
+       { "-learn",     NEXTARG,        0,              unsetlearn },
+       { "stp",        NEXTARG,        0,              setstp },
+       { "-stp",       NEXTARG,        0,              unsetstp },
+       { "edge",       NEXTARG,        0,              setedge },
+       { "-edge",      NEXTARG,        0,              unsetedge },
+       { "autoedge",   NEXTARG,        0,              setautoedge },
+       { "-autoedge",  NEXTARG,        0,              unsetautoedge },
+       { "ptp",        NEXTARG,        0,              setptp },
+       { "-ptp",       NEXTARG,        0,              unsetptp },
+       { "autoptp",    NEXTARG,        0,              setautoptp },
+       { "-autoptp",   NEXTARG,        0,              unsetautoptp },
+       { "flush",      0,              0,              bridge_flush },
+       { "flushall",   0,              0,              bridge_flushall },
+       { "static",     NEXTARG2,       0,              NULL, bridge_addaddr },
+       { "deladdr",    NEXTARG,        0,              bridge_deladdr },
+       { "maxaddr",    NEXTARG,        0,              bridge_maxaddr },
+       { "addr",       0,              0,              bridge_addrs },
+       { "hellotime",  NEXTARG,        0,              bridge_hellotime },
+       { "fwddelay",   NEXTARG,        0,              bridge_fwddelay },
+       { "maxage",     NEXTARG,        0,              bridge_maxage },
+       { "proto",      NEXTARG,        0,              bridge_proto },
+       { "ifpriority", NEXTARG2,       0,              NULL, bridge_ifprio },
+       { "ifcost",     NEXTARG2,       0,              NULL, bridge_ifcost },
+       { "-ifcost",    NEXTARG,        0,              bridge_noifcost },
+       { "timeout",    NEXTARG,        0,              bridge_timeout },
+       { "holdcnt",    NEXTARG,        0,              bridge_holdcnt },
+       { "spanpriority", NEXTARG,      0,              bridge_priority },
+       { "ipdst",      NEXTARG,        0,              setifipdst },
+#if 0
+       /* XXX `rule` special-cased below */
+       { "rule",       0,              0,              bridge_rule },
+#endif
+       { "rules",      NEXTARG,        0,              bridge_rules },
+       { "rulefile",   NEXTARG,        0,              bridge_rulefile },
+       { "flushrule",  NEXTARG,        0,              bridge_flushrule },
+       { "description", NEXTARG,       0,              setifdesc },
+       { "descr",      NEXTARG,        0,              setifdesc },
+       { "-description", 1,            0,              unsetifdesc },
+       { "-descr",     1,              0,              unsetifdesc },
+       { "wol",        IFXF_WOL,       0,              setifxflags },
+       { "-wol",       -IFXF_WOL,      0,              setifxflags },
+#else /* SMALL */
+       { "group",      NEXTARG,        0,              setignore },
+       { "powersave",  NEXTARG0,       0,              setignore },
+       { "priority",   NEXTARG,        0,              setignore },
+       { "rtlabel",    NEXTARG,        0,              setignore },
+       { "mpls",       IFXF_MPLS,      0,              setignore },
+       { "vlanprio",   NEXTARG,        0,              setignore },
+       { "txpower",    NEXTARG,        0,              setignore },
+       { "nwflag",     NEXTARG,        0,              setignore },
+       { "rdomain",    NEXTARG,        0,              setignore },
+       { "-inet6",     IFXF_NOINET6,   0,              setignore } ,
+       { "description", NEXTARG,       0,              setignore },
+       { "descr",      NEXTARG,        0,              setignore },
+       { "wol",        IFXF_WOL,       0,              setignore },
+       { "-wol",       -IFXF_WOL,      0,              setignore },
+#endif /* SMALL */
+#if 0
+       /* XXX `create' special-cased below */
+       { "create",     0,              0,              clone_create } ,
+#endif
+       { "destroy",    0,              0,              clone_destroy } ,
+       { "link0",      IFF_LINK0,      0,              setifflags } ,
+       { "-link0",     -IFF_LINK0,     0,              setifflags } ,
+       { "link1",      IFF_LINK1,      0,              setifflags } ,
+       { "-link1",     -IFF_LINK1,     0,              setifflags } ,
+       { "link2",      IFF_LINK2,      0,              setifflags } ,
+       { "-link2",     -IFF_LINK2,     0,              setifflags } ,
+       { "media",      NEXTARG0,       A_MEDIA,        setmedia },
+       { "mediaopt",   NEXTARG,        A_MEDIAOPTSET,  setmediaopt },
+       { "-mediaopt",  NEXTARG,        A_MEDIAOPTCLR,  unsetmediaopt },
+       { "mode",       NEXTARG,        A_MEDIAMODE,    setmediamode },
+       { "instance",   NEXTARG,        A_MEDIAINST,    setmediainst },
+       { "inst",       NEXTARG,        A_MEDIAINST,    setmediainst },
+       { "lladdr",     NEXTARG,        0,              setiflladdr },
+       { NULL, /*src*/ 0,              0,              setifaddr },
+       { NULL, /*dst*/ 0,              0,              setifdstaddr },
+       { NULL, /*illegal*/0,           0,              NULL },
+};
+
+int    getinfo(struct ifreq *, int);
+void   getsock(int);
+void   printgroupattribs(char *);
+void   printif(char *, int);
+void   printb_status(unsigned short, char *);
+const char *get_linkstate(int, int);
+void   status(int, struct sockaddr_dl *, int);
+const char *get_string(const char *, const char *, u_int8_t *, int *);
+void   print_string(const u_int8_t *, int);
+char   *sec2str(time_t);
+
+const char *get_media_type_string(int);
+const char *get_media_subtype_string(int);
+int    get_media_mode(int, const char *);
+int    get_media_subtype(int, const char *);
+int    get_media_options(int, const char *);
+int    lookup_media_word(const struct ifmedia_description *, int,
+           const char *);
+void   print_media_word(int, int, int);
+void   process_media_commands(void);
+void   init_current_media(void);
+
+unsigned long get_ts_map(int, int, int);
+
+void   in_status(int);
+void   in_getaddr(const char *, int);
+void   in_getprefix(const char *, int);
+#ifdef INET6
+void   in6_fillscopeid(struct sockaddr_in6 *sin6);
+void   in6_alias(struct in6_ifreq *);
+void   in6_status(int);
+void   in6_getaddr(const char *, int);
+void   in6_getprefix(const char *, int);
+#endif /* INET6 */
+void    at_status(int);
+void    at_getaddr(const char *, int);
+void   ieee80211_status(void);
+void   ieee80211_listchans(void);
+void   ieee80211_listnodes(void);
+void   ieee80211_printnode(struct ieee80211_nodereq *);
+
+/* Known address families */
+const struct afswtch {
+       char *af_name;
+       short af_af;
+       void (*af_status)(int);
+       void (*af_getaddr)(const char *, int);
+       void (*af_getprefix)(const char *, int);
+       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, in_getprefix,
+           SIOCDIFADDR, SIOCAIFADDR, C(ridreq), C(in_addreq) },
+#ifdef INET6
+       { "inet6", AF_INET6, in6_status, in6_getaddr, in6_getprefix,
+           SIOCDIFADDR_IN6, SIOCAIFADDR_IN6, C(in6_ridreq), C(in6_addreq) },
+#endif /* INET6 */
+#ifndef SMALL
+       { "atalk", AF_APPLETALK, at_status, at_getaddr, NULL,
+           SIOCDIFADDR, SIOCAIFADDR, C(addreq), C(addreq) },
+#endif
+       { 0,    0,          0,          0 }
+};
+
+COnst struct afswtch *afp;     /*the address family being set or asked about*/
+#endif /* _IFCONFIG_H_ */


-- 
http://www.sizeofvoid.org - raf...@sizeofvoid.org
XMPP: z...@jabber.ccc.de
Key fingerprint: BDDD 91E9 28CB 3A52 3E99  61B0 C359 2691 BAC6 A3B1

Reply via email to