Perhaps the functions belong in a shared object?
On May 4, 2011 10:46 AM, "Rafael Sadowski" <raf...@sizeofvoid.org> wrote:
> 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