fills command for the extension header filtering */
| 218 | |
| 219 | /* fills command for the extension header filtering */ |
| 220 | int |
| 221 | fill_ext6hdr( ipfw_insn *cmd, char *av) |
| 222 | { |
| 223 | int tok; |
| 224 | char *s = av; |
| 225 | |
| 226 | cmd->arg1 = 0; |
| 227 | while(s) { |
| 228 | av = strsep( &s, ",") ; |
| 229 | tok = match_token(ext6hdrcodes, av); |
| 230 | switch (tok) { |
| 231 | case EXT_FRAGMENT: |
| 232 | cmd->arg1 |= EXT_FRAGMENT; |
| 233 | break; |
| 234 | case EXT_HOPOPTS: |
| 235 | cmd->arg1 |= EXT_HOPOPTS; |
| 236 | break; |
| 237 | case EXT_ROUTING: |
| 238 | cmd->arg1 |= EXT_ROUTING; |
| 239 | break; |
| 240 | case EXT_DSTOPTS: |
| 241 | cmd->arg1 |= EXT_DSTOPTS; |
| 242 | break; |
| 243 | case EXT_AH: |
| 244 | cmd->arg1 |= EXT_AH; |
| 245 | break; |
| 246 | case EXT_ESP: |
| 247 | cmd->arg1 |= EXT_ESP; |
| 248 | break; |
| 249 | case EXT_RTHDR0: |
| 250 | cmd->arg1 |= EXT_RTHDR0; |
| 251 | break; |
| 252 | case EXT_RTHDR2: |
| 253 | cmd->arg1 |= EXT_RTHDR2; |
| 254 | break; |
| 255 | default: |
| 256 | errx(EX_DATAERR, |
| 257 | "invalid option for ipv6 exten header"); |
| 258 | break; |
| 259 | } |
| 260 | } |
| 261 | if (cmd->arg1 == 0) |
| 262 | return (0); |
| 263 | cmd->opcode = O_EXT_HDR; |
| 264 | cmd->len |= F_INSN_SIZE(ipfw_insn); |
| 265 | return (1); |
| 266 | } |
| 267 | |
| 268 | void |
| 269 | print_ext6hdr(struct buf_pr *bp, const ipfw_insn *cmd ) |
no test coverage detected