diff options
author | Ben Pfaff <blp@nicira.com> | 2011-08-04 16:20:34 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2011-08-08 13:14:01 -0700 |
commit | 3bffc610fa3ae08fa837f6bd0bf7a2deebdd0970 (patch) | |
tree | 7be0a4ffe170363db81f8426d0e325df0a2de332 /lib/packets.h | |
parent | 6adf1730c8e21a653faf1d614fdddb2cd7825670 (diff) |
odp-util: New function odp_flow_key_from_string().
This will be used in upcoming commits.
Diffstat (limited to 'lib/packets.h')
-rw-r--r-- | lib/packets.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/packets.h b/lib/packets.h index 8e13a25b..a389e6af 100644 --- a/lib/packets.h +++ b/lib/packets.h @@ -264,6 +264,25 @@ BUILD_ASSERT_DECL(VLAN_ETH_HEADER_LEN == sizeof(struct vlan_eth_header)); ((uint8_t *) ip)[2], \ ((uint8_t *) ip)[3] +/* Example: + * + * char *string = "1 33.44.55.66 2"; + * ovs_be32 ip; + * int a, b; + * + * if (sscanf(string, "%d"IP_SCAN_FMT"%d", + * &a, IP_SCAN_ARGS(&ip), &b) == 1 + IP_SCAN_COUNT + 1) { + * ... + * } + */ +#define IP_SCAN_FMT "%"SCNu8".%"SCNu8".%"SCNu8".%"SCNu8 +#define IP_SCAN_ARGS(ip) \ + ((void) (ovs_be32) *(ip), &((uint8_t *) ip)[0]), \ + &((uint8_t *) ip)[1], \ + &((uint8_t *) ip)[2], \ + &((uint8_t *) ip)[3] +#define IP_SCAN_COUNT 4 + /* Returns true if 'netmask' is a CIDR netmask, that is, if it consists of N * high-order 1-bits and 32-N low-order 0-bits. */ static inline bool @@ -366,6 +385,20 @@ struct arp_eth_header { } __attribute__((packed)); BUILD_ASSERT_DECL(ARP_ETH_HEADER_LEN == sizeof(struct arp_eth_header)); +/* Example: + * + * char *string = "1 ::1 2"; + * char ipv6_s[IPV6_SCAN_LEN + 1]; + * struct in6_addr ipv6; + * + * if (sscanf(string, "%d"IPV6_SCAN_FMT"%d", &a, ipv6_s, &b) == 3 + * && inet_pton(AF_INET6, ipv6_s, &ipv6) == 1) { + * ... + * } + */ +#define IPV6_SCAN_FMT "%46[0123456789abcdefABCDEF:.]" +#define IPV6_SCAN_LEN 46 + extern const struct in6_addr in6addr_exact; #define IN6ADDR_EXACT_INIT { { { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, \ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff } } } |