diff options
| author | Philippe Guibert <philippe.guibert@6wind.com> | 2018-06-11 15:30:11 +0200 |
|---|---|---|
| committer | Philippe Guibert <philippe.guibert@6wind.com> | 2018-06-28 08:52:15 +0200 |
| commit | e7f7dad4a8a0e37809d0b282a4bafd9609e9f823 (patch) | |
| tree | 5adbf66aed0eebae5191cb903ef43be569a913c1 /zebra/zebra_pbr.c | |
| parent | 538f0137f15751ef602b91ef02145080f65ac3d5 (diff) | |
zebra: add packet length into pbr support
The packet length is added to iptable zapi message.
Then the iptable structure is taking into account the pkt_len field.
The show pbr iptable command displays the packet length used if any.
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
Diffstat (limited to 'zebra/zebra_pbr.c')
| -rw-r--r-- | zebra/zebra_pbr.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/zebra/zebra_pbr.c b/zebra/zebra_pbr.c index daf384c836..1004337602 100644 --- a/zebra/zebra_pbr.c +++ b/zebra/zebra_pbr.c @@ -360,6 +360,8 @@ uint32_t zebra_pbr_iptable_hash_key(void *arg) key = jhash2(pnt, ZEBRA_IPSET_NAME_HASH_SIZE, 0x63ab42de); key = jhash_1word(iptable->fwmark, key); + key = jhash_1word(iptable->pkt_len_min, key); + key = jhash_1word(iptable->pkt_len_max, key); return jhash_3words(iptable->filter_bm, iptable->type, iptable->unique, key); } @@ -384,6 +386,10 @@ int zebra_pbr_iptable_hash_equal(const void *arg1, const void *arg2) if (strncmp(r1->ipset_name, r2->ipset_name, ZEBRA_IPSET_NAME_SIZE)) return 0; + if (r1->pkt_len_min != r2->pkt_len_min) + return 0; + if (r1->pkt_len_max != r2->pkt_len_max) + return 0; return 1; } @@ -1016,7 +1022,15 @@ static int zebra_pbr_show_iptable_walkcb(struct hash_backet *backet, void *arg) vty_out(vty, "IPtable %s action %s (%u)\n", iptable->ipset_name, iptable->action == ZEBRA_IPTABLES_DROP ? "drop" : "redirect", iptable->unique); - + if (iptable->pkt_len_min || iptable->pkt_len_max) { + if (!iptable->pkt_len_max) + vty_out(vty, "\t pkt len %u\n", + iptable->pkt_len_min); + else + vty_out(vty, "\t pkt len [%u;%u]\n", + iptable->pkt_len_min, + iptable->pkt_len_max); + } ret = hook_call(zebra_pbr_iptable_wrap_script_get_stat, zns, iptable, &pkts, &bytes); if (ret && pkts > 0) |
