| 109 | } |
| 110 | |
| 111 | static int |
| 112 | ipv6_addr_cpy(uint8_t *spec, uint8_t *mask, char *token, |
| 113 | struct parse_status *status) |
| 114 | { |
| 115 | struct in6_addr ip; |
| 116 | uint32_t depth, i; |
| 117 | |
| 118 | APP_CHECK(parse_ipv6_addr(token, &ip, &depth) == 0, status, |
| 119 | "unrecognized input \"%s\", expect valid ipv6 address", token); |
| 120 | if (status->status < 0) |
| 121 | return -1; |
| 122 | |
| 123 | memcpy(mask, &rte_flow_item_ipv6_mask.hdr.src_addr, sizeof(ip)); |
| 124 | memcpy(spec, ip.s6_addr, sizeof(struct in6_addr)); |
| 125 | |
| 126 | for (i = 0; i < depth && (i%8 <= sizeof(struct in6_addr)); i++) |
| 127 | mask[i/8] &= ~(1 << (7-i%8)); |
| 128 | |
| 129 | return 0; |
| 130 | } |
| 131 | |
| 132 | void |
| 133 | parse_flow_tokens(char **tokens, uint32_t n_tokens, |
no test coverage detected