On Wed May 04, 2011 at 08:09:44PM -0400, Arnaud Bergeron wrote: > 2011/5/4 Rafael Sadowski <raf...@sizeofvoid.org>: > > 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 B -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 > > This > > > 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 > > and this tells me you just copied all the function declarations in a > header and tried to compile ifconfig.c in your program. This will > obviously not work since ifconfig.c defines a main() function (in > addition to a usage()) and you want to use your own. > > You have to make a separate file in the ifconfig directory that holds > the main() and usage() functions (or a separate file for all the other > functions as edd suggests) and includes the ifconfig.h header and > change the accompanying build instructions. >
separate header file with all the other functions works fine with ifconfig and ifconfigd. 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 2 May 2011 15:19:09 -0000 @@ -105,6 +105,7 @@ #include <ifaddrs.h> #include "brconfig.h" +#include "ifconfig.h" #include "pbkdf2.h" struct ifreq ifr, ridreq; @@ -137,126 +138,6 @@ 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 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 2 May 2011 15:19:09 -0000 @@ -0,0 +1,143 @@ +/* + * 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 <net/if_sppp.h> + +#include <netatalk/at.h> + +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 +#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