15
15
#include "lladdr.h"
16
16
17
17
int
18
- set_lladdr (const char * ifname , const char * lladdr ,
18
+ set_lladdr (openvpn_net_ctx_t * ctx , const char * ifname , const char * lladdr ,
19
19
const struct env_set * es )
20
20
{
21
- struct argv argv = argv_new ();
22
21
int r ;
23
22
24
23
if (!ifname || !lladdr )
@@ -27,17 +26,13 @@ set_lladdr(const char *ifname, const char *lladdr,
27
26
}
28
27
29
28
#if defined(TARGET_LINUX )
30
- #ifdef ENABLE_IPROUTE
31
- argv_printf (& argv ,
32
- "%s link set addr %s dev %s" ,
33
- iproute_path , lladdr , ifname );
34
- #else
35
- argv_printf (& argv ,
36
- "%s %s hw ether %s" ,
37
- IFCONFIG_PATH ,
38
- ifname , lladdr );
39
- #endif
40
- #elif defined(TARGET_SOLARIS )
29
+ uint8_t addr [ETH_ALEN ];
30
+
31
+ sscanf (lladdr , MAC_FMT , MAC_SCAN_ARG (addr ));
32
+ r = (net_addr_ll_set (ctx , ifname , addr ) == 0 );
33
+ #else /* if defined(TARGET_LINUX) */
34
+ struct argv argv = argv_new ();
35
+ #if defined(TARGET_SOLARIS )
41
36
argv_printf (& argv ,
42
37
"%s %s ether %s" ,
43
38
IFCONFIG_PATH ,
@@ -57,18 +52,19 @@ set_lladdr(const char *ifname, const char *lladdr,
57
52
"%s %s ether %s" ,
58
53
IFCONFIG_PATH ,
59
54
ifname , lladdr );
60
- #else /* if defined(TARGET_LINUX ) */
55
+ #else /* if defined(TARGET_SOLARIS ) */
61
56
msg (M_WARN , "Sorry, but I don't know how to configure link layer addresses on this operating system." );
62
57
return -1 ;
63
- #endif /* if defined(TARGET_LINUX) */
64
-
58
+ #endif /* if defined(TARGET_SOLARIS) */
65
59
argv_msg (M_INFO , & argv );
66
60
r = openvpn_execve_check (& argv , es , M_WARN , "ERROR: Unable to set link layer address." );
61
+ argv_free (& argv );
62
+ #endif /* if defined(TARGET_LINUX) */
63
+
67
64
if (r )
68
65
{
69
66
msg (M_INFO , "TUN/TAP link layer address set to %s" , lladdr );
70
67
}
71
68
72
- argv_free (& argv );
73
69
return r ;
74
70
}
0 commit comments