17 |
#include "utils.h" |
#include "utils.h" |
18 |
|
|
19 |
|
|
20 |
const char *ll_addr_n2a(unsigned char *addr, int alen, int type, char *buf, int blen) |
const char* FAST_FUNC ll_addr_n2a(unsigned char *addr, int alen, int type, char *buf, int blen) |
21 |
{ |
{ |
22 |
int i; |
int i; |
23 |
int l; |
int l; |
27 |
return inet_ntop(AF_INET, addr, buf, blen); |
return inet_ntop(AF_INET, addr, buf, blen); |
28 |
} |
} |
29 |
l = 0; |
l = 0; |
30 |
for (i=0; i<alen; i++) { |
for (i = 0; i < alen; i++) { |
31 |
if (i==0) { |
if (i == 0) { |
32 |
snprintf(buf+l, blen, ":%02x"+1, addr[i]); |
snprintf(buf + l, blen, ":%02x"+1, addr[i]); |
33 |
blen -= 2; |
blen -= 2; |
34 |
l += 2; |
l += 2; |
35 |
} else { |
} else { |
36 |
snprintf(buf+l, blen, ":%02x", addr[i]); |
snprintf(buf + l, blen, ":%02x", addr[i]); |
37 |
blen -= 3; |
blen -= 3; |
38 |
l += 3; |
l += 3; |
39 |
} |
} |
41 |
return buf; |
return buf; |
42 |
} |
} |
43 |
|
|
44 |
int ll_addr_a2n(unsigned char *lladdr, int len, char *arg) |
int FAST_FUNC ll_addr_a2n(unsigned char *lladdr, int len, char *arg) |
45 |
{ |
{ |
46 |
|
int i; |
47 |
|
|
48 |
if (strchr(arg, '.')) { |
if (strchr(arg, '.')) { |
49 |
inet_prefix pfx; |
inet_prefix pfx; |
50 |
if (get_addr_1(&pfx, arg, AF_INET)) { |
if (get_addr_1(&pfx, arg, AF_INET)) { |
56 |
} |
} |
57 |
memcpy(lladdr, pfx.data, 4); |
memcpy(lladdr, pfx.data, 4); |
58 |
return 4; |
return 4; |
59 |
} else { |
} |
|
int i; |
|
60 |
|
|
61 |
for (i=0; i<len; i++) { |
for (i = 0; i < len; i++) { |
62 |
int temp; |
int temp; |
63 |
char *cp = strchr(arg, ':'); |
char *cp = strchr(arg, ':'); |
64 |
if (cp) { |
if (cp) { |
65 |
*cp = 0; |
*cp = 0; |
66 |
cp++; |
cp++; |
67 |
} |
} |
68 |
if (sscanf(arg, "%x", &temp) != 1 || (temp < 0 || temp > 255)) { |
if (sscanf(arg, "%x", &temp) != 1 || (temp < 0 || temp > 255)) { |
69 |
bb_error_msg("\"%s\" is invalid lladdr", arg); |
bb_error_msg("\"%s\" is invalid lladdr", arg); |
70 |
return -1; |
return -1; |
71 |
} |
} |
72 |
lladdr[i] = temp; |
lladdr[i] = temp; |
73 |
if (!cp) { |
if (!cp) { |
74 |
break; |
break; |
|
} |
|
|
arg = cp; |
|
75 |
} |
} |
76 |
return i+1; |
arg = cp; |
77 |
} |
} |
78 |
|
return i+1; |
79 |
} |
} |