summaryrefslogtreecommitdiffstats
path: root/src/openvpn/lladdr.c
diff options
context:
space:
mode:
authorAlon Bar-Lev <alon.barlev@gmail.com>2012-02-29 22:11:59 +0200
committerDavid Sommerseth <davids@redhat.com>2012-03-22 22:07:08 +0100
commit34cb9132ef2dae08f91a66015ea5437539a4b557 (patch)
treeedd69bb83cc490a47692cb847d066231cd6146fd /src/openvpn/lladdr.c
parentfcff80aac1f71ebf881fbc269fb3c4df0789de6b (diff)
downloadopenvpn-34cb9132ef2dae08f91a66015ea5437539a4b557.tar.gz
openvpn-34cb9132ef2dae08f91a66015ea5437539a4b557.tar.xz
openvpn-34cb9132ef2dae08f91a66015ea5437539a4b557.zip
build: standard directory layout
Suitable for mature project. root - administrative stuff doc - documents src - sources tests - tests distro - distro specific files sample - samples SIDE EFFECT: many changes to rpm spec. Signed-off-by: Alon Bar-Lev <alon.barlev@gmail.com> Acked-by: Adriaan de Jong <dejong@fox-it.com> Signed-off-by: David Sommerseth <davids@redhat.com>
Diffstat (limited to 'src/openvpn/lladdr.c')
-rw-r--r--src/openvpn/lladdr.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/openvpn/lladdr.c b/src/openvpn/lladdr.c
new file mode 100644
index 0000000..fc01b63
--- /dev/null
+++ b/src/openvpn/lladdr.c
@@ -0,0 +1,61 @@
+/*
+ * Support routine for configuring link layer address
+ */
+
+#include "syshead.h"
+#include "error.h"
+#include "misc.h"
+
+int set_lladdr(const char *ifname, const char *lladdr,
+ const struct env_set *es)
+{
+ struct argv argv = argv_new ();
+ int r;
+
+ if (!ifname || !lladdr)
+ return -1;
+
+#if defined(TARGET_LINUX)
+#ifdef ENABLE_IPROUTE
+ argv_printf (&argv,
+ "%s link set addr %s dev %s",
+ iproute_path, lladdr, ifname);
+#else
+ argv_printf (&argv,
+ "%s %s hw ether %s",
+ IFCONFIG_PATH,
+ ifname, lladdr);
+#endif
+#elif defined(TARGET_SOLARIS)
+ argv_printf (&argv,
+ "%s %s ether %s",
+ IFCONFIG_PATH,
+ ifname, lladdr);
+#elif defined(TARGET_OPENBSD)
+ argv_printf (&argv,
+ "%s %s lladdr %s",
+ IFCONFIG_PATH,
+ ifname, lladdr);
+#elif defined(TARGET_DARWIN)
+ argv_printf (&argv,
+ "%s %s lladdr %s",
+ IFCONFIG_PATH,
+ ifname, lladdr);
+#elif defined(TARGET_FREEBSD)
+ argv_printf (&argv,
+ "%s %s ether %s",
+ IFCONFIG_PATH,
+ ifname, lladdr);
+#else
+ msg (M_WARN, "Sorry, but I don't know how to configure link layer addresses on this operating system.");
+ return -1;
+#endif
+
+ argv_msg (M_INFO, &argv);
+ r = openvpn_execve_check (&argv, es, M_WARN, "ERROR: Unable to set link layer address.");
+ if (r)
+ msg (M_INFO, "TUN/TAP link layer address set to %s", lladdr);
+
+ argv_reset (&argv);
+ return r;
+}