https://fedorahosted.org/pipermail/netcf-devel/2010-September/000449.html
---
autogen.sh | 2 +-
bootstrap | 29 ++++++++--------
configure.ac | 9 +----
mingw32-netcf.spec.in | 14 +++----
src/Makefile.am | 6 +--
src/netcf.c | 39 ++++++++++++++++++++++
src/netcf_win.c | 86 ++++++++++---------------------------------------
src/netcf_win.h | 25 +-------------
8 files changed, 83 insertions(+), 127 deletions(-)
diff --git a/autogen.sh b/autogen.sh
index 156c5fa..b0197c3 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -85,7 +85,7 @@ fi
mkdir -p $BUILD_AUX
$LIBTOOLIZE --copy --force
-./bootstrap $GNULIB_SRCDIR
+./bootstrap ${GNULIB_SRCDIR:+--gnulib-srcdir="$GNULIB_SRCDIR"}
aclocal -I gnulib/m4
autoheader
automake --add-missing
diff --git a/bootstrap b/bootstrap
index 57ed2df..84d81cb 100755
--- a/bootstrap
+++ b/bootstrap
@@ -58,28 +58,28 @@ gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
<$gnulib_tool || exit
modules='
+arpa_inet
c-ctype
+close
+fcntl
+getdtablesize
+getopt-posix
+inet_ntop
+inet_pton
+netinet_in
+pthread
read-file
safe-alloc
-warnings
-sys_wait
sigaction
-pthread
-unistd
-getdtablesize
signal
-arpa_inet
-sys_ioctl
-getopt-posix
+socket
string
+sys_ioctl
sys_socket
-socket
-netinet_in
+sys_wait
+unistd
vasprintf
-fcntl
-inet_ntop
-inet_pton
-close
+warnings
'
# Tell gnulib to:
@@ -94,4 +94,5 @@ $gnulib_tool \
--tests-base=gnulib/tests \
--aux-dir=build/aux \
--quiet \
+ --libtool \
--import $modules
diff --git a/configure.ac b/configure.ac
index cba128b..c1e000d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,7 @@
AC_INIT(netcf, 0.1.6)
AC_CONFIG_SRCDIR([src/netcf.c])
AC_CONFIG_AUX_DIR([build/aux])
+AC_CONFIG_MACRO_DIR([gnulib/m4])
AM_CONFIG_HEADER([config.h])
AM_INIT_AUTOMAKE([-Wno-portability 1.11 color-tests parallel-tests])
AM_SILENT_RULES([yes]) # make --enable-silent-rules the default.
@@ -25,14 +26,6 @@ PLATFORM_WIN32="no"
case "$host" in
*-*-mingw*)
PLATFORM_WIN32="yes"
- MINGW_EXTRA_LDFLAGS="-no-undefined"
- ;;
- *-*-cygwin*)
- MINGW_EXTRA_LDFLAGS="-no-undefined"
- ;;
- *-*-linux*)
- MINGW_EXTRA_LDFLAGS="-no-undefined"
- ;;
*)
;;
esac
diff --git a/mingw32-netcf.spec.in b/mingw32-netcf.spec.in
index bdae12b..489dafb 100644
--- a/mingw32-netcf.spec.in
+++ b/mingw32-netcf.spec.in
@@ -3,6 +3,7 @@
%global _use_internal_dependency_generator 0
%global __find_requires %{_mingw32_findrequires}
%global __find_provides %{_mingw32_findprovides}
+%define __debug_install_post %{_mingw32_debug_install_post}
Name: mingw32-netcf
Version: @VERSION@
@@ -53,20 +54,17 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root,-)
%{_mingw32_bindir}/ncftool.exe
%{_mingw32_bindir}/libnetcf-1.dll
+%{_mingw32_includedir}/*.h
%{_mingw32_libdir}/pkgconfig/netcf.pc
-%{_mingw32_libdir}/libnetcf-1.dll.a
-%{_mingw32_libdir}/libnetcf-1.la
+%{_mingw32_libdir}/libnetcf.dll.a
+%{_mingw32_libdir}/libnetcf.la
%{_mingw32_datadir}
%doc AUTHORS COPYING NEWS
%changelog
-* Mon Sep 1 2010 Adam Stokes <ajs(a)redhat.com> - 0.1.6-2
-- Update spec to not require .dll.a or *.la
-- Fixed building of DLL
-
-* Thu Apr 16 2010 Laine Stump <laine(a)redhat.com> - 0.1.6-1
-- New version
+* Mon Sep 1 2010 Adam Stokes <ajs(a)redhat.com> - 0.1.6-1
+- MinGW Port
* Mon Nov 30 2009 David Lutterkort <lutter(a)redhat.com> - 0.1.5-1
- New version
diff --git a/src/Makefile.am b/src/Makefile.am
index 16f8f1e..98025cc 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -5,7 +5,7 @@ GNULIB_CFLAGS= -I $(top_srcdir)/gnulib/lib
AM_CFLAGS = $(NETCF_CFLAGS) $(GNULIB_CFLAGS) $(WARN_CFLAGS) \
$(LIBXML_CFLAGS) $(LIBXSLT_CFLAGS) $(LIBAUGEAS_CFLAGS)
-include_HEADERS = netcf.h
+include_HEADERS = netcf.h netcf_win.h
lib_LTLIBRARIES = libnetcf.la
@@ -32,14 +32,12 @@ libnetcf_la_SOURCES = netcf.h netcf.c internal.h \
ref.h list.h \
xslt_ext.c $(DRIVER_SOURCES)
libnetcf_la_LDFLAGS = -Wl,--version-script=netcf.syms \
- -version-info $(LIBNETCF_VERSION_INFO) @MINGW_EXTRA_LDFLAGS@
+ -version-info $(LIBNETCF_VERSION_INFO) -no-undefined
libnetcf_la_LIBADD = $(NETCF_LIBDEPS) $(GNULIB)
if PLATFORM_WIN32
libnetcf_la_LIBADD += $(WIN32LIB)
endif
-#libnetcf_la_DEPENDENCIES = $(libnetcf_la_LIBADD) netcf.syms
-
ncftool_SOURCES = ncftool.c
ncftool_LDADD = libnetcf.la $(READLINE_LIBS) $(GNULIB)
diff --git a/src/netcf.c b/src/netcf.c
index f43d1c2..7948d0b 100644
--- a/src/netcf.c
+++ b/src/netcf.c
@@ -109,7 +109,12 @@ int ncf_init(struct netcf **ncf, const char *root) {
if ((*ncf)->data_dir == NULL)
(*ncf)->data_dir = NETCF_DATADIR "/netcf";
(*ncf)->debug = getenv("NETCF_DEBUG") != NULL;
+#ifdef WIN32
+ return 0;
+#else
+ /* Needs investigation on WIN32 */
return drv_init(*ncf);
+#endif
oom:
ncf_close(*ncf);
*ncf = NULL;
@@ -159,12 +164,16 @@ struct netcf_if * ncf_lookup_by_name(struct netcf *ncf, const char
*name) {
return drv_lookup_by_name(ncf, name);
}
+#ifdef WIN32
+int ncf_lookup_by_mac_string() { return -1; }
+#else
int
ncf_lookup_by_mac_string(struct netcf *ncf, const char *mac,
int maxifaces, struct netcf_if **ifaces) {
API_ENTRY(ncf);
return drv_lookup_by_mac_string(ncf, mac, maxifaces, ifaces);
}
+#endif
/*
* Define/start/stop/undefine interfaces
@@ -188,10 +197,15 @@ const char *ncf_if_mac_string(struct netcf_if *nif) {
}
/* Delete the definition */
+#ifdef WIN32
+/* No mingw implementation */
+int ncf_if_undefine() { return -1; };
+#else
int ncf_if_undefine(struct netcf_if *nif) {
API_ENTRY(nif->ncf);
return drv_undefine(nif);
}
+#endif
/* Bring the interface up */
int ncf_if_up(struct netcf_if *nif) {
@@ -210,28 +224,43 @@ int ncf_if_down(struct netcf_if *nif) {
/* Produce an XML description for the interface, in the same format that
* NCF_DEFINE expects
*/
+#ifdef WIN32
+/* No mingw implementation */
+char *ncf_if_xml_desc() { return NULL; }
+#else
char *ncf_if_xml_desc(struct netcf_if *nif) {
API_ENTRY(nif->ncf);
return drv_xml_desc(nif);
}
+#endif
/* Produce an XML description of the current live state of the
* interface, in the same format that NCF_DEFINE expects, but
* potentially with extra info not contained in the static config (ie
* the current IP address of an interface that uses DHCP)
*/
+#ifdef WIN32
+/* No mingw implementation */
+char *ncf_if_xml_state() { return NULL; }
+#else
char *ncf_if_xml_state(struct netcf_if *nif) {
API_ENTRY(nif->ncf);
return drv_xml_state(nif);
}
+#endif
/* Report various status info about the interface as bits in
* "flags". Returns 0 on success, -1 on failure
*/
+#ifdef WIN32
+/* No mingw implementation */
+int ncf_if_status() { return -1; }
+#else
int ncf_if_status(struct netcf_if *nif, unsigned int *flags) {
API_ENTRY(nif->ncf);
return drv_if_status(nif, flags);
}
+#endif
/* Release any resources used by this NETCF_IF; the pointer is invalid
* after this call
@@ -258,17 +287,27 @@ int ncf_error(struct netcf *ncf, const char **errmsg, const char
**details) {
/*
* Test interface
*/
+#ifdef WIN32
+/* No mingw implementation */
+int ncf_get_aug() { return -1; }
+#else
int ncf_get_aug(struct netcf *ncf, const char *ncf_xml, char **aug_xml) {
API_ENTRY(ncf);
return drv_get_aug(ncf, ncf_xml, aug_xml);
}
+#endif
+#ifdef WIN32
+/* No mingw implementation */
+int ncf_put_aug() { return -1; }
+#else
int ncf_put_aug(struct netcf *ncf, const char *aug_xml, char **ncf_xml) {
API_ENTRY(ncf);
return drv_put_aug(ncf, aug_xml, ncf_xml);
}
+#endif
#ifndef WIN32
/* Do not see any other way around this as there is no
diff --git a/src/netcf_win.c b/src/netcf_win.c
index a1dbd5c..166465e 100644
--- a/src/netcf_win.c
+++ b/src/netcf_win.c
@@ -5,15 +5,15 @@
#include <stdlib.h>
#include "netcf_win.h"
-#define MAX_TRIES 3
+#define ADDR_BLOCK 5
#define GAA_FLAGS ( GAA_FLAG_SKIP_DNS_SERVER | GAA_FLAG_SKIP_MULTICAST )
-#define BUFSIZE 8192
+#define BUFSIZE 1024
PMIB_IPADDRTABLE _get_ip_addr_table(PMIB_IPADDRTABLE ipAddrTable) {
DWORD r = 0;
DWORD buf = 0;
- ipAddrTable = (PMIB_IPADDRTABLE) malloc(sizeof (MIB_IPADDRTABLE));
+ ipAddrTable = (PMIB_IPADDRTABLE) sizeof (MIB_IPADDRTABLE);
if (GetIpAddrTable(ipAddrTable, &buf, 0) == ERROR_INSUFFICIENT_BUFFER) {
free(ipAddrTable);
ipAddrTable = (PMIB_IPADDRTABLE) malloc(buf);
@@ -55,7 +55,7 @@ PIP_ADAPTER_ADDRESSES _get_ip_adapter_info(PIP_ADAPTER_ADDRESSES
addrList) {
DWORD r;
int i;
- for(i = 0; i < 5; i++) {
+ for(i = 0; i < ADDR_BLOCK; i++) {
r = GetAdaptersAddresses(AF_INET, GAA_FLAGS, NULL, addrList, &bufferLength);
if (r != ERROR_BUFFER_OVERFLOW) {
break;
@@ -72,56 +72,6 @@ PIP_ADAPTER_ADDRESSES _get_ip_adapter_info(PIP_ADAPTER_ADDRESSES
addrList) {
free(addrList);
}
-/* All undefined routines in windows */
-int drv_get_aug(struct netcf *ncf, const char *ncf_xml, char **aug_xml) {
-#ifdef WIN32
- return -1;
-#endif
-}
-
-int drv_if_status(struct netcf_if *nif, unsigned int *flags) {
-#ifdef WIN32
- return -1;
-#endif
-}
-
-int drv_init(struct netcf *ncf) {
-#ifdef WIN32
- return -1;
-#endif
-}
-
-int drv_lookup_by_mac_string(struct netcf *ncf, const char *mac,
- int maxifaces, struct netcf_if **ifaces) {
-#ifdef WIN32
- return -1;
-#endif
-}
-
-int drv_put_aug(struct netcf *ncf, const char *aug_xml, char **ncf_xml) {
-#ifdef WIN32
- return -1;
-#endif
-}
-
-int drv_undefine(struct netcf_if *nif) {
-#ifdef WIN32
- return -1;
-#endif
-}
-
-char *drv_xml_desc(struct netcf_if *nif) {
-#ifdef WIN32
- return -1;
-#endif
-}
-
-char *drv_xml_state(struct netcf_if *nif) {
-#ifdef WIN32
- return -1;
-#endif
-}
-
struct netcf_if *drv_define(struct netcf *ncf, const char *xml_str) {
#ifdef WIN32
return ncf;
@@ -304,7 +254,7 @@ static int list_interface_ids(struct netcf *ncf ATTRIBUTE_UNUSED,
adapterp = _get_ip_adapter_info(addrList);
for (nint = 0; adapterp != NULL; nint++) {
if (names) {
- char name[8192];
+ char name[BUFSIZE];
WideCharToMultiByte(CP_UTF8, 0, adapterp->FriendlyName,
-1, name, sizeof(name), NULL, NULL);
names[nint] = strdup(name);
@@ -338,7 +288,7 @@ struct netcf_if *drv_lookup_by_name(struct netcf *ncf, const char
*name) {
adapterp = _get_ip_adapter_info(addrList);
for (nint = 0; adapterp != NULL; nint++) {
if (name) {
- char wName[8192];
+ char wName[BUFSIZE];
WideCharToMultiByte(CP_UTF8, 0, adapterp->FriendlyName,
-1, wName, sizeof(wName), NULL, NULL);
if (strcmp(wName, name) == 0) {
@@ -357,26 +307,24 @@ struct netcf_if *drv_lookup_by_name(struct netcf *ncf, const char
*name) {
const char *drv_mac_string(struct netcf_if *nif) {
// struct netcf *ncf = nif->ncf;
- char mac[256];
PIP_ADAPTER_ADDRESSES addrList = NULL;
PIP_ADAPTER_ADDRESSES adapterp = NULL;
adapterp = _get_ip_adapter_info(addrList);
while(adapterp != NULL) {
- char wName[8192];
+ char wName[BUFSIZE];
WideCharToMultiByte(CP_UTF8, 0, adapterp->FriendlyName,
-1, wName, sizeof(wName), NULL, NULL);
if (strcmp(wName,nif->name) == 0) {
if ((int)adapterp->PhysicalAddressLength >= 6)
continue; /* just want ethernet for now */
- sprintf(mac, "%02X:%02X:%02X:%02X:%02X:%02X",
- adapterp->PhysicalAddress[0],
- adapterp->PhysicalAddress[1],
- adapterp->PhysicalAddress[2],
- adapterp->PhysicalAddress[3],
- adapterp->PhysicalAddress[4],
- adapterp->PhysicalAddress[5]);
- nif->mac = strdup(mac);
+ nif->mac = asprintf(mac, "%02X:%02X:%02X:%02X:%02X:%02X",
+ adapterp->PhysicalAddress[0],
+ adapterp->PhysicalAddress[1],
+ adapterp->PhysicalAddress[2],
+ adapterp->PhysicalAddress[3],
+ adapterp->PhysicalAddress[4],
+ adapterp->PhysicalAddress[5]);
goto done;
}
adapterp = adapterp->Next;
@@ -395,7 +343,7 @@ int drv_if_down(struct netcf_if *nif) {
if (intfTableDup != NULL) {
for (i = 0; i < (int) intfTableDup->dwNumEntries; i++) {
intRow = (PMIB_IFROW) & intfTableDup->table[i];
- char wName[8192];
+ char wName[BUFSIZE];
WideCharToMultiByte(CP_UTF8, 0, intRow->wszName,
-1, wName, sizeof(wName), NULL, NULL);
if (strcmp(wName,nif->name) == 0) {
@@ -421,7 +369,7 @@ int drv_if_up(struct netcf_if *nif) {
if (intfTableDup != NULL) {
for (i = 0; i < (int) intfTableDup->dwNumEntries; i++) {
intRow = (PMIB_IFROW) & intfTableDup->table[i];
- char wName[8192];
+ char wName[BUFSIZE];
WideCharToMultiByte(CP_UTF8, 0, intRow->wszName,
-1, wName, sizeof(wName), NULL, NULL);
if (strcmp(wName,nif->name) == 0) {
@@ -507,7 +455,7 @@ int drv_add_ip_address(struct netcf_if *nif, char *ipAddr, char
*netmask) {
if (ipAddrTableDup != NULL) {
for(i=0;i<ipAddrTableDup->dwNumEntries;i++) {
ifIndex = ipAddrTableDup->table[i].dwIndex;
- char wName[8192];
+ char wName[BUFSIZE];
WideCharToMultiByte(CP_UTF8, 0, adapterp->FriendlyName,
-1, wName, sizeof(wName), NULL, NULL);
if (strcmp(wName,nif->name) == 0) {
diff --git a/src/netcf_win.h b/src/netcf_win.h
index c1bb1d6..845082a 100644
--- a/src/netcf_win.h
+++ b/src/netcf_win.h
@@ -1,7 +1,7 @@
/*
* netcf-win.h: windows functions
*
- * Copyright (C) 2009-2010 Red Hat Inc.
+ * Copyright (C) 2010 Red Hat Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -42,28 +42,7 @@
#include "ref.h"
#include "list.h"
-static int aug_put_xml(struct netcf *ncf, xmlDocPtr xml);
-static int bridge_slaves(struct netcf *ncf, const char *name, char ***slaves);
-static int cmpstrp(const void *p1, const void *p2);
-static int is_slave(struct netcf *ncf, const char *intf);
-static int list_ifcfg_paths(struct netcf *ncf, char ***intf);
-static int list_interface_ids(struct netcf *ncf, int maxnames, char **names,
- unsigned int flags, const char *id_attr);
-static int list_interfaces(struct netcf *ncf, char ***intf);
-static int uniq_ifcfg_paths(struct netcf *ncf, int ndevs, char **devs, char ***intf);
-static bool has_ifcfg_file(struct netcf *ncf, const char *name);
-static bool is_bond(struct netcf *ncf, const char *name);
-static bool is_bridge(struct netcf *ncf, const char *name);
-static char *device_name_from_xml(struct netcf *ncf, xmlDocPtr ncf_xml);
-static char *find_ifcfg_path_by_device(struct netcf *ncf, const char *name);
-static char *find_ifcfg_path_by_hwaddr(struct netcf *ncf, const char *mac);
-static char *find_ifcfg_path(struct netcf *ncf, const char *name);
-static void bond_setup(struct netcf *ncf, const char *name, bool alias);
-static void bridge_physdevs(struct netcf *ncf);
-static void rm_all_interfaces(struct netcf *ncf, xmlDocPtr ncf_xml);
-static void rm_interface(struct netcf *ncf, const char *name);
-static xmlDocPtr aug_get_xml_for_nif(struct netcf_if *nif);
-static xmlDocPtr aug_get_xml(struct netcf *ncf, int nint, char **intf);
+
struct netcf_if *make_netcf_if(struct netcf *ncf, char *name);
int xasprintf(char **strp, const char *format, ...);
--
1.7.2.3