utils: add get_be{16, 32, 64}, use them where possible
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net> Acked-by: Phil Sutter <phil@nwl.cc>
This commit is contained in:
parent
89ae502056
commit
9f7401fa49
|
|
@ -112,6 +112,9 @@ int get_u16(__u16 *val, const char *arg, int base);
|
||||||
int get_s16(__s16 *val, const char *arg, int base);
|
int get_s16(__s16 *val, const char *arg, int base);
|
||||||
int get_u8(__u8 *val, const char *arg, int base);
|
int get_u8(__u8 *val, const char *arg, int base);
|
||||||
int get_s8(__s8 *val, const char *arg, int base);
|
int get_s8(__s8 *val, const char *arg, int base);
|
||||||
|
int get_be64(__be64 *val, const char *arg, int base);
|
||||||
|
int get_be32(__be32 *val, const char *arg, int base);
|
||||||
|
int get_be16(__be16 *val, const char *arg, int base);
|
||||||
int get_addr64(__u64 *ap, const char *cp);
|
int get_addr64(__u64 *ap, const char *cp);
|
||||||
|
|
||||||
char *hexstring_n2a(const __u8 *str, int len, char *buf, int blen);
|
char *hexstring_n2a(const __u8 *str, int len, char *buf, int blen);
|
||||||
|
|
|
||||||
|
|
@ -55,9 +55,8 @@ static int fou_parse_opt(int argc, char **argv, struct nlmsghdr *n,
|
||||||
if (!matches(*argv, "port")) {
|
if (!matches(*argv, "port")) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
|
|
||||||
if (get_u16(&port, *argv, 0) || port == 0)
|
if (get_be16(&port, *argv, 0) || port == 0)
|
||||||
invarg("invalid port", *argv);
|
invarg("invalid port", *argv);
|
||||||
port = htons(port);
|
|
||||||
port_set = 1;
|
port_set = 1;
|
||||||
} else if (!matches(*argv, "ipproto")) {
|
} else if (!matches(*argv, "ipproto")) {
|
||||||
struct protoent *servptr;
|
struct protoent *servptr;
|
||||||
|
|
|
||||||
|
|
@ -172,16 +172,12 @@ static int vxlan_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
invarg("max addresses", *argv);
|
invarg("max addresses", *argv);
|
||||||
} else if (!matches(*argv, "port") ||
|
} else if (!matches(*argv, "port") ||
|
||||||
!matches(*argv, "srcport")) {
|
!matches(*argv, "srcport")) {
|
||||||
__u16 minport, maxport;
|
|
||||||
|
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (get_u16(&minport, *argv, 0))
|
if (get_be16(&range.low, *argv, 0))
|
||||||
invarg("min port", *argv);
|
invarg("min port", *argv);
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (get_u16(&maxport, *argv, 0))
|
if (get_be16(&range.high, *argv, 0))
|
||||||
invarg("max port", *argv);
|
invarg("max port", *argv);
|
||||||
range.low = htons(minport);
|
|
||||||
range.high = htons(maxport);
|
|
||||||
} else if (!matches(*argv, "dstport")) {
|
} else if (!matches(*argv, "dstport")) {
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (get_u16(&dstport, *argv, 0))
|
if (get_u16(&dstport, *argv, 0))
|
||||||
|
|
|
||||||
|
|
@ -190,9 +190,9 @@ static int parse_encap_ip(struct rtattr *rta, size_t len, int *argcp, char ***ar
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (id_ok++)
|
if (id_ok++)
|
||||||
duparg2("id", *argv);
|
duparg2("id", *argv);
|
||||||
if (get_u64(&id, *argv, 0))
|
if (get_be64(&id, *argv, 0))
|
||||||
invarg("\"id\" value is invalid\n", *argv);
|
invarg("\"id\" value is invalid\n", *argv);
|
||||||
rta_addattr64(rta, len, LWTUNNEL_IP_ID, htonll(id));
|
rta_addattr64(rta, len, LWTUNNEL_IP_ID, id);
|
||||||
} else if (strcmp(*argv, "dst") == 0) {
|
} else if (strcmp(*argv, "dst") == 0) {
|
||||||
inet_prefix addr;
|
inet_prefix addr;
|
||||||
|
|
||||||
|
|
@ -267,9 +267,9 @@ static int parse_encap_ip6(struct rtattr *rta, size_t len, int *argcp, char ***a
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (id_ok++)
|
if (id_ok++)
|
||||||
duparg2("id", *argv);
|
duparg2("id", *argv);
|
||||||
if (get_u64(&id, *argv, 0))
|
if (get_be64(&id, *argv, 0))
|
||||||
invarg("\"id\" value is invalid\n", *argv);
|
invarg("\"id\" value is invalid\n", *argv);
|
||||||
rta_addattr64(rta, len, LWTUNNEL_IP6_ID, htonll(id));
|
rta_addattr64(rta, len, LWTUNNEL_IP6_ID, id);
|
||||||
} else if (strcmp(*argv, "dst") == 0) {
|
} else if (strcmp(*argv, "dst") == 0) {
|
||||||
inet_prefix addr;
|
inet_prefix addr;
|
||||||
|
|
||||||
|
|
|
||||||
13
ip/ipxfrm.c
13
ip/ipxfrm.c
|
|
@ -1109,15 +1109,10 @@ int xfrm_id_parse(xfrm_address_t *saddr, struct xfrm_id *id, __u16 *family,
|
||||||
filter.id_proto_mask = XFRM_FILTER_MASK_FULL;
|
filter.id_proto_mask = XFRM_FILTER_MASK_FULL;
|
||||||
|
|
||||||
} else if (strcmp(*argv, "spi") == 0) {
|
} else if (strcmp(*argv, "spi") == 0) {
|
||||||
__u32 spi;
|
|
||||||
|
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (get_u32(&spi, *argv, 0))
|
if (get_be32(&id->spi, *argv, 0))
|
||||||
invarg("SPI value is invalid", *argv);
|
invarg("SPI value is invalid", *argv);
|
||||||
|
|
||||||
spi = htonl(spi);
|
|
||||||
id->spi = spi;
|
|
||||||
|
|
||||||
filter.id_spi_mask = XFRM_FILTER_MASK_FULL;
|
filter.id_spi_mask = XFRM_FILTER_MASK_FULL;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -1252,9 +1247,8 @@ static int xfrm_selector_upspec_parse(struct xfrm_selector *sel,
|
||||||
|
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
|
|
||||||
if (get_u16(&sel->sport, *argv, 0))
|
if (get_be16(&sel->sport, *argv, 0))
|
||||||
invarg("value after \"sport\" is invalid", *argv);
|
invarg("value after \"sport\" is invalid", *argv);
|
||||||
sel->sport = htons(sel->sport);
|
|
||||||
if (sel->sport)
|
if (sel->sport)
|
||||||
sel->sport_mask = ~((__u16)0);
|
sel->sport_mask = ~((__u16)0);
|
||||||
|
|
||||||
|
|
@ -1265,9 +1259,8 @@ static int xfrm_selector_upspec_parse(struct xfrm_selector *sel,
|
||||||
|
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
|
|
||||||
if (get_u16(&sel->dport, *argv, 0))
|
if (get_be16(&sel->dport, *argv, 0))
|
||||||
invarg("value after \"dport\" is invalid", *argv);
|
invarg("value after \"dport\" is invalid", *argv);
|
||||||
sel->dport = htons(sel->dport);
|
|
||||||
if (sel->dport)
|
if (sel->dport)
|
||||||
sel->dport_mask = ~((__u16)0);
|
sel->dport_mask = ~((__u16)0);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -175,11 +175,9 @@ static int xfrm_seq_parse(__u32 *seq, int *argcp, char ***argvp)
|
||||||
int argc = *argcp;
|
int argc = *argcp;
|
||||||
char **argv = *argvp;
|
char **argv = *argvp;
|
||||||
|
|
||||||
if (get_u32(seq, *argv, 0))
|
if (get_be32(seq, *argv, 0))
|
||||||
invarg("SEQ value is invalid", *argv);
|
invarg("SEQ value is invalid", *argv);
|
||||||
|
|
||||||
*seq = htonl(*seq);
|
|
||||||
|
|
||||||
*argcp = argc;
|
*argcp = argc;
|
||||||
*argvp = argv;
|
*argvp = argv;
|
||||||
|
|
||||||
|
|
@ -359,13 +357,11 @@ static int xfrm_state_modify(int cmd, unsigned int flags, int argc, char **argv)
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
xfrm_encap_type_parse(&encap.encap_type, &argc, &argv);
|
xfrm_encap_type_parse(&encap.encap_type, &argc, &argv);
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (get_u16(&encap.encap_sport, *argv, 0))
|
if (get_be16(&encap.encap_sport, *argv, 0))
|
||||||
invarg("SPORT value after \"encap\" is invalid", *argv);
|
invarg("SPORT value after \"encap\" is invalid", *argv);
|
||||||
encap.encap_sport = htons(encap.encap_sport);
|
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (get_u16(&encap.encap_dport, *argv, 0))
|
if (get_be16(&encap.encap_dport, *argv, 0))
|
||||||
invarg("DPORT value after \"encap\" is invalid", *argv);
|
invarg("DPORT value after \"encap\" is invalid", *argv);
|
||||||
encap.encap_dport = htons(encap.encap_dport);
|
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
get_addr(&oa, *argv, AF_UNSPEC);
|
get_addr(&oa, *argv, AF_UNSPEC);
|
||||||
memcpy(&encap.encap_oa, &oa.data, sizeof(encap.encap_oa));
|
memcpy(&encap.encap_oa, &oa.data, sizeof(encap.encap_oa));
|
||||||
|
|
|
||||||
|
|
@ -111,8 +111,7 @@ int ll_proto_a2n(unsigned short *id, const char *buf)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (get_u16(id, buf, 0))
|
if (get_be16(id, buf, 0))
|
||||||
return -1;
|
return -1;
|
||||||
*id = htons(*id);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
33
lib/utils.c
33
lib/utils.c
|
|
@ -353,6 +353,39 @@ int get_s8(__s8 *val, const char *arg, int base)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int get_be64(__be64 *val, const char *arg, int base)
|
||||||
|
{
|
||||||
|
__u64 v;
|
||||||
|
int ret = get_u64(&v, arg, base);
|
||||||
|
|
||||||
|
if (!ret)
|
||||||
|
*val = htonll(v);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_be32(__be32 *val, const char *arg, int base)
|
||||||
|
{
|
||||||
|
__u32 v;
|
||||||
|
int ret = get_u32(&v, arg, base);
|
||||||
|
|
||||||
|
if (!ret)
|
||||||
|
*val = htonl(v);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int get_be16(__be16 *val, const char *arg, int base)
|
||||||
|
{
|
||||||
|
__u16 v;
|
||||||
|
int ret = get_u16(&v, arg, base);
|
||||||
|
|
||||||
|
if (!ret)
|
||||||
|
*val = htons(v);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* This uses a non-standard parsing (ie not inet_aton, or inet_pton)
|
/* This uses a non-standard parsing (ie not inet_aton, or inet_pton)
|
||||||
* because of legacy choice to parse 10.8 as 10.8.0.0 not 10.0.0.8
|
* because of legacy choice to parse 10.8 as 10.8.0.0 not 10.0.0.8
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -150,11 +150,11 @@ static int flower_parse_port(char *str, __u8 ip_port,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = get_u16(&port, str, 10);
|
ret = get_be16(&port, str, 10);
|
||||||
if (ret)
|
if (ret)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
addattr16(n, MAX_MSG, type, htons(port));
|
addattr16(n, MAX_MSG, type, port);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
10
tc/f_u32.c
10
tc/f_u32.c
|
|
@ -767,12 +767,9 @@ static int parse_offset(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
|
||||||
}
|
}
|
||||||
sel->flags |= TC_U32_VAROFFSET;
|
sel->flags |= TC_U32_VAROFFSET;
|
||||||
} else if (matches(*argv, "mask") == 0) {
|
} else if (matches(*argv, "mask") == 0) {
|
||||||
__u16 mask;
|
|
||||||
|
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (get_u16(&mask, *argv, 16))
|
if (get_be16(&sel->offmask, *argv, 16))
|
||||||
return -1;
|
return -1;
|
||||||
sel->offmask = htons(mask);
|
|
||||||
sel->flags |= TC_U32_VAROFFSET;
|
sel->flags |= TC_U32_VAROFFSET;
|
||||||
} else if (matches(*argv, "shift") == 0) {
|
} else if (matches(*argv, "shift") == 0) {
|
||||||
int shift;
|
int shift;
|
||||||
|
|
@ -802,12 +799,9 @@ static int parse_hashkey(int *argc_p, char ***argv_p, struct tc_u32_sel *sel)
|
||||||
|
|
||||||
while (argc > 0) {
|
while (argc > 0) {
|
||||||
if (matches(*argv, "mask") == 0) {
|
if (matches(*argv, "mask") == 0) {
|
||||||
__u32 mask;
|
|
||||||
|
|
||||||
NEXT_ARG();
|
NEXT_ARG();
|
||||||
if (get_u32(&mask, *argv, 16))
|
if (get_be32(&sel->hmask, *argv, 16))
|
||||||
return -1;
|
return -1;
|
||||||
sel->hmask = htonl(mask);
|
|
||||||
} else if (matches(*argv, "at") == 0) {
|
} else if (matches(*argv, "at") == 0) {
|
||||||
int num;
|
int num;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue