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

Reply via email to