cosmetics
[tomato.git] / release / src / router / openvpn / lladdr.c
blob7aefdba31fb71d88ff6a13344e968e0140fa8852
1 /*
2 * Support routine for configuring link layer address
3 */
5 #include "syshead.h"
6 #include "error.h"
7 #include "misc.h"
9 int set_lladdr(const char *ifname, const char *lladdr,
10 const struct env_set *es)
12 struct argv argv = argv_new ();
13 int r;
15 if (!ifname || !lladdr)
16 return -1;
18 #if defined(TARGET_LINUX)
19 #ifdef CONFIG_FEATURE_IPROUTE
20 argv_printf (&argv,
21 "%s link set addr %s dev %s",
22 iproute_path, lladdr, ifname);
23 #else
24 argv_printf (&argv,
25 "%s %s hw ether %s",
26 IFCONFIG_PATH,
27 ifname, lladdr);
28 #endif
29 #elif defined(TARGET_SOLARIS)
30 argv_printf (&argv,
31 "%s %s ether %s",
32 IFCONFIG_PATH,
33 ifname, lladdr);
34 #elif defined(TARGET_OPENBSD)
35 argv_printf (&argv,
36 "%s %s lladdr %s",
37 IFCONFIG_PATH,
38 ifname, lladdr);
39 #elif defined(TARGET_DARWIN)
40 argv_printf (&argv,
41 "%s %s lladdr %s",
42 IFCONFIG_PATH,
43 ifname, lladdr);
44 #elif defined(TARGET_FREEBSD)
45 argv_printf (&argv,
46 "%s %s ether %s",
47 IFCONFIG_PATH,
48 ifname, lladdr);
49 #else
50 msg (M_WARN, "Sorry, but I don't know how to configure link layer addresses on this operating system.");
51 return -1;
52 #endif
54 argv_msg (M_INFO, &argv);
55 r = openvpn_execve_check (&argv, es, M_WARN, "ERROR: Unable to set link layer address.");
56 if (r)
57 msg (M_INFO, "TUN/TAP link layer address set to %s", lladdr);
59 argv_reset (&argv);
60 return r;