X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fmeta-flow.c;h=b37f7816e283e432308aba89ef54aa6b2a09c05e;hb=99ab7312c17cd4ab603eb6194c50b9f1ef3ca1c9;hp=c0925e849702cab6eedb015239ab86c444a10e52;hpb=3634dff82aefd9a6a802551a629be80cc3494af5;p=sliver-openvswitch.git diff --git a/lib/meta-flow.c b/lib/meta-flow.c index c0925e849..b37f7816e 100644 --- a/lib/meta-flow.c +++ b/lib/meta-flow.c @@ -41,13 +41,15 @@ VLOG_DEFINE_THIS_MODULE(meta_flow); sizeof ((union mf_value *)0)->MEMBER, \ 8 * sizeof ((union mf_value *)0)->MEMBER -static const struct mf_field mf_fields[MFF_N_IDS] = { +extern const struct mf_field mf_fields[MFF_N_IDS]; /* Silence a warning. */ + +const struct mf_field mf_fields[MFF_N_IDS] = { /* ## -------- ## */ /* ## metadata ## */ /* ## -------- ## */ { - MFF_TUN_ID, "tun_id", NULL, + MFF_TUN_ID, "tun_id", "tunnel_id", MF_FIELD_SIZES(be64), MFM_FULLY, MFS_HEXADECIMAL, @@ -409,7 +411,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = { }, { - MFF_IP_PROTO, "nw_proto", NULL, + MFF_IP_PROTO, "nw_proto", "ip_proto", MF_FIELD_SIZES(u8), MFM_NONE, MFS_DECIMAL, @@ -431,8 +433,8 @@ static const struct mf_field mf_fields[MFF_N_IDS] = { OFPUTIL_P_ANY, /* Will be shifted for OXM. */ OFPUTIL_P_NONE, }, { - MFF_IP_DSCP_SHIFTED, "nw_tos_shifted", NULL, - MF_FIELD_SIZES(u8), + MFF_IP_DSCP_SHIFTED, "ip_dscp", NULL, + 1, 6, MFM_NONE, MFS_DECIMAL, MFP_IP_ANY, @@ -442,7 +444,7 @@ static const struct mf_field mf_fields[MFF_N_IDS] = { OFPUTIL_P_ANY, /* Will be shifted for non-OXM. */ OFPUTIL_P_NONE, }, { - MFF_IP_ECN, "nw_ecn", NULL, + MFF_IP_ECN, "nw_ecn", "ip_ecn", 1, 2, MFM_NONE, MFS_DECIMAL, @@ -728,14 +730,6 @@ static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5); const struct mf_field *mf_from_nxm_header__(uint32_t header); static void nxm_init(void); -/* Returns the field with the given 'id'. */ -const struct mf_field * -mf_from_id(enum mf_field_id id) -{ - ovs_assert((unsigned int) id < MFF_N_IDS); - return &mf_fields[id]; -} - /* Returns the field with the given 'name', or a null pointer if no field has * that name. */ const struct mf_field * @@ -2379,15 +2373,15 @@ mf_from_ethernet_string(const struct mf_field *mf, const char *s, ovs_assert(mf->n_bytes == ETH_ADDR_LEN); n = -1; - if (sscanf(s, ETH_ADDR_SCAN_FMT"%n", ETH_ADDR_SCAN_ARGS(mac), &n) > 0 + if (ovs_scan(s, ETH_ADDR_SCAN_FMT"%n", ETH_ADDR_SCAN_ARGS(mac), &n) && n == strlen(s)) { memset(mask, 0xff, ETH_ADDR_LEN); return NULL; } n = -1; - if (sscanf(s, ETH_ADDR_SCAN_FMT"/"ETH_ADDR_SCAN_FMT"%n", - ETH_ADDR_SCAN_ARGS(mac), ETH_ADDR_SCAN_ARGS(mask), &n) > 0 + if (ovs_scan(s, ETH_ADDR_SCAN_FMT"/"ETH_ADDR_SCAN_FMT"%n", + ETH_ADDR_SCAN_ARGS(mac), ETH_ADDR_SCAN_ARGS(mask), &n) && n == strlen(s)) { return NULL; } @@ -2403,11 +2397,10 @@ mf_from_ipv4_string(const struct mf_field *mf, const char *s, ovs_assert(mf->n_bytes == sizeof *ip); - if (sscanf(s, IP_SCAN_FMT"/"IP_SCAN_FMT, - IP_SCAN_ARGS(ip), IP_SCAN_ARGS(mask)) == IP_SCAN_COUNT * 2) { + if (ovs_scan(s, IP_SCAN_FMT"/"IP_SCAN_FMT, + IP_SCAN_ARGS(ip), IP_SCAN_ARGS(mask))) { /* OK. */ - } else if (sscanf(s, IP_SCAN_FMT"/%d", - IP_SCAN_ARGS(ip), &prefix) == IP_SCAN_COUNT + 1) { + } else if (ovs_scan(s, IP_SCAN_FMT"/%d", IP_SCAN_ARGS(ip), &prefix)) { if (prefix <= 0 || prefix > 32) { return xasprintf("%s: network prefix bits not between 1 and " "32", s); @@ -2416,7 +2409,7 @@ mf_from_ipv4_string(const struct mf_field *mf, const char *s, } else { *mask = htonl(((1u << prefix) - 1) << (32 - prefix)); } - } else if (sscanf(s, IP_SCAN_FMT, IP_SCAN_ARGS(ip)) == IP_SCAN_COUNT) { + } else if (ovs_scan(s, IP_SCAN_FMT, IP_SCAN_ARGS(ip))) { *mask = OVS_BE32_MAX; } else { return xasprintf("%s: invalid IP address", s); @@ -2554,9 +2547,8 @@ parse_flow_tun_flags(const char *s_, const char *(*bit_to_string)(uint32_t), int name_len; unsigned long long int flags; uint32_t bit; - int n0; - if (sscanf(name, "%lli%n", &flags, &n0) > 0 && n0 > 0) { + if (ovs_scan(name, "%lli", &flags)) { result |= flags; continue; } @@ -2600,7 +2592,7 @@ mf_from_tun_flags_string(const char *s, ovs_be16 *valuep, ovs_be16 *maskp) } return xasprintf("%s: unknown tunnel flags (valid flags are \"df\", " - "\"csum\", \"key\"", s); + "\"csum\", \"key\")", s); } /* Parses 's', a string value for field 'mf', into 'value' and 'mask'. Returns @@ -2947,9 +2939,9 @@ mf_parse_subfield__(struct mf_subfield *sf, const char **sp) } s += name_len; - if (sscanf(s, "[%d..%d]", &start, &end) == 2) { + if (ovs_scan(s, "[%d..%d]", &start, &end)) { /* Nothing to do. */ - } else if (sscanf(s, "[%d]", &start) == 1) { + } else if (ovs_scan(s, "[%d]", &start)) { end = start; } else if (!strncmp(s, "[]", 2)) { start = 0;