summaryrefslogtreecommitdiff
path: root/pbrd/pbr_map.c
AgeCommit message (Collapse)Author
2023-09-05pbrd: Free Memory in pbr_map_deleteKeelan10
This commit frees dynamically allocated memory associated with `pbrms->nhgrp_name` and `pbrms->dst` which were causing memory leaks. The ASan leak log for reference: ``` ================================================================= ==107458==ERROR: LeakSanitizer: detected memory leaks Direct leak of 56 byte(s) in 1 object(s) allocated from: #0 0x7f87d644ca37 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154 #1 0x7f87d5feaa37 in qcalloc ../lib/memory.c:105 #2 0x7f87d6054ffd in prefix_new ../lib/prefix.c:1180 #3 0x55722f3c2885 in pbr_map_match_dst_magic ../pbrd/pbr_vty.c:302 #4 0x55722f3b5c24 in pbr_map_match_dst pbrd/pbr_vty_clippy.c:228 #5 0x7f87d5f32d61 in cmd_execute_command_real ../lib/command.c:993 #6 0x7f87d5f330ee in cmd_execute_command ../lib/command.c:1052 #7 0x7f87d5f33dc0 in cmd_execute ../lib/command.c:1218 #8 0x7f87d60e4177 in vty_command ../lib/vty.c:591 #9 0x7f87d60e905c in vty_execute ../lib/vty.c:1354 #10 0x7f87d60ef45a in vtysh_read ../lib/vty.c:2362 #11 0x7f87d60d42d4 in event_call ../lib/event.c:1979 #12 0x7f87d5fbe828 in frr_run ../lib/libfrr.c:1213 #13 0x55722f3ac795 in main ../pbrd/pbr_main.c:168 #14 0x7f87d5b82d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 Direct leak of 2 byte(s) in 1 object(s) allocated from: #0 0x7f87d63f39a7 in __interceptor_strdup ../../../../src/libsanitizer/asan/asan_interceptors.cpp:454 #1 0x7f87d5feaafc in qstrdup ../lib/memory.c:117 #2 0x55722f3da139 in pbr_nht_set_seq_nhg ../pbrd/pbr_nht.c:551 #3 0x55722f3c693f in pbr_map_nexthop_group_magic ../pbrd/pbr_vty.c:1140 #4 0x55722f3bdaae in pbr_map_nexthop_group pbrd/pbr_vty_clippy.c:1284 #5 0x7f87d5f32d61 in cmd_execute_command_real ../lib/command.c:993 #6 0x7f87d5f330ee in cmd_execute_command ../lib/command.c:1052 #7 0x7f87d5f33dc0 in cmd_execute ../lib/command.c:1218 #8 0x7f87d60e4177 in vty_command ../lib/vty.c:591 #9 0x7f87d60e905c in vty_execute ../lib/vty.c:1354 #10 0x7f87d60ef45a in vtysh_read ../lib/vty.c:2362 #11 0x7f87d60d42d4 in event_call ../lib/event.c:1979 #12 0x7f87d5fbe828 in frr_run ../lib/libfrr.c:1213 #13 0x55722f3ac795 in main ../pbrd/pbr_main.c:168 #14 0x7f87d5b82d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 SUMMARY: AddressSanitizer: 58 byte(s) leaked in 2 allocation(s). ``` Signed-off-by: Keelan Cannoo <keelan.cannoo@icloud.com>
2023-08-20pbrd: Correct Handling of Sequence DeletionKeelan10
This commit ensures that sequence data and associated structures are correctly deleted to prevent memory leaks The ASan leak log for reference: ``` Direct leak of 432 byte(s) in 1 object(s) allocated from: #0 0x7f911ebaba37 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154 #1 0x7f911e749a4e in qcalloc ../lib/memory.c:105 #2 0x564fd444b2d3 in pbrms_get ../pbrd/pbr_map.c:527 #3 0x564fd443a82d in pbr_map ../pbrd/pbr_vty.c:90 #4 0x7f911e691d61 in cmd_execute_command_real ../lib/command.c:993 #5 0x7f911e6920ee in cmd_execute_command ../lib/command.c:1052 #6 0x7f911e692dc0 in cmd_execute ../lib/command.c:1218 #7 0x7f911e843197 in vty_command ../lib/vty.c:591 #8 0x7f911e84807c in vty_execute ../lib/vty.c:1354 #9 0x7f911e84e47a in vtysh_read ../lib/vty.c:2362 #10 0x7f911e8332f4 in event_call ../lib/event.c:1979 #11 0x7f911e71d828 in frr_run ../lib/libfrr.c:1213 #12 0x564fd4425795 in main ../pbrd/pbr_main.c:168 #13 0x7f911e2e1d8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 ``` Signed-off-by: Keelan Cannoo <keelan.cannoo@icloud.com>
2023-08-09pbrd: add packet mangling actions (src/dst ip-addr/port, dscp, ecn)G. Paul Ziemba
Signed-off-by: G. Paul Ziemba <paulz@labn.net>
2023-08-09pbrd: use flags to indicate active fieldsG. Paul Ziemba
Before now, PBRD used non-zero values to imply that a rule's match or action field was active. This approach was getting cumbersome for fields where 0 is a valid active value and various field-specific magic values had to be used. This commit changes PBRD to use a flag bit per field to indicate that the field is active. Signed-off-by: G. Paul Ziemba <paulz@labn.net>
2023-07-19pbrd: add vlan filters pcp/vlan-id/vlan-flags; ip-protocol any (pbr feature)G. Paul Ziemba
Subset: feature in PBR New PBR rule fields: match ip-protocol (was only tcp|udp, now any value in /etc/protocols) match pcp (0-7) match vlan (1-4094) match vlan (tagged|untagged|untagged-or-zero) Filter flags Add filter_bm (flags) field internally to indicate which filter fields should be considered active. Bit definitions as in lib/pbr.h. This commit uses only the PBR_FILTER_PCP bit, but other fields will be added in future commits. (Fixes bug related to determining set/not-set state of pcp filter) Shift vlan filter flags to lib/pbr.h Changes by: Josh Werner <joshuawerner@mitre.org> Eli Baum <ebaum@mitre.org> G. Paul Ziemba <paulz@labn.net> Signed-off-by: G. Paul Ziemba <paulz@labn.net>
2023-03-24*: Convert event.h to frrevent.hDonald Sharp
We should probably prevent any type of namespace collision with something else. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-03-24*: Rename thread.[ch] to event.[ch]Donald Sharp
This is a first in a series of commits, whose goal is to rename the thread system in FRR to an event system. There is a continual problem where people are confusing `struct thread` with a true pthread. In reality, our entire thread.c is an event system. In this commit rename the thread.[ch] files to event.[ch]. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2023-02-09*: auto-convert to SPDX License IDsDavid Lamparter
Done with a combination of regex'ing and banging my head against a wall. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2022-05-02pbrd: fix interface compare usageRafael Zalamena
Don't use `strncmp` when we expect to match the whole string. Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2022-01-27pbrd: pbr route maps get addr family of nhgsStephen Worley
When adding a nhg to a route map, make sure to specify the `family` of the rm by looking at the contents of the nhg. Installation in the kernel (for DSCP rules in particular) relies on this being specified in the netlink message. Signed-off-by: Wesley Coakley <wcoakley@nvidia.com> Signed-off-by: Stephen Worley <sworley@nvidia.com>
2021-10-07pbrd: add vlan actions to vtyEli Baum
Signed-off-by: Eli Baum <ebaum@mitre.org>
2021-03-17*: require semicolon after DEFINE_QOBJ & co.David Lamparter
Again, see previous commits. Signed-off-by: David Lamparter <equinox@diac24.net>
2021-03-17*: require semicolon after DEFINE_MTYPE & coDavid Lamparter
Back when I put this together in 2015, ISO C11 was still reasonably new and we couldn't require it just yet. Without ISO C11, there is no "good" way (only bad hacks) to require a semicolon after a macro that ends with a function definition. And if you added one anyway, you'd get "spurious semicolon" warnings on some compilers... With C11, `_Static_assert()` at the end of a macro will make it so that the semicolon is properly required, consumed, and not warned about. Consistently requiring semicolons after "file-level" macros matches Linux kernel coding style and helps some editors against mis-syntax'ing these macros. Signed-off-by: David Lamparter <equinox@diac24.net>
2021-02-14*: remove tabs & newlines from log messagesDavid Lamparter
Neither tabs nor newlines are acceptable in syslog messages. They also break line-based parsing of file logs. Signed-off-by: David Lamparter <equinox@diac24.net>
2020-09-23pbrd: use bool for pbr_send_pbr_map() return valStephen Worley
Use a bool as the return val for pbr_send_pbr_map() to make the code a bit more readable. Dont expect there to be need for values other than true or false anyway. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2020-09-22pbrd: cleanup pbr ifp info if not sent to zebraStephen Worley
Properly cleanup the pbr interface data if nothing actually gets sent to zebra, since we will never get the callback notification from zapi to issue final deletion. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2020-09-11pbrd: Ensure rule is installed on interface upDonald Sharp
If we are experiencing an interface that is bouncing very fast and the last operation that we experienced was a ifdown we will send rule deletions associated with that interface. If we have not received notification that hte rule was removed *but* we immiedately get another ifup notification when we go to install the rule we are deciding that it's not ready to send down again, as that we still think it is installed. Force the rule installation when we have a interface up event. Ticket: CM-31042 Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2020-09-11bgpd, lib, pbrd, zebra: Pass by ifnameDonald Sharp
When installing rules pass by the interface name across zapi. This is being changed because we have a situation where if you quickly create/destroy ephermeal interfaces under linux the upper level protocol may be trying to add a rule for a interface that does not quite exist at the moment. Since ip rules actually want the interface name ( to handle just this sort of situation ) convert over to passing the interface name and storing it and using it in zebra. Ticket: CM-31042 Signed-off-by: Stephen Worley <sworley@nvidia.com> Signed-off-by: Donald Sharp <sharpd@nvidia.com>
2020-09-01pbrd: fix SA warning in nhg mapMark Stapp
Fix SA warnings in nhg map functions. Signed-off-by: Mark Stapp <mjs@voltanet.io>
2020-08-28pbrd: When multiple items share the pnhc do the right thingDonald Sharp
We had multiple pnhc cache entries with the same nexthop pointer. This causes some large amount of confusion. Fixup the code to handle this situation better. Ticket: CM-31044 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-08-28pbrd: Allow interfaces to be deleted then added back inDonald Sharp
PBR needs the ability to allow ephermeal interfaces( bonds, vrfs, dummy, bridges, etc ) to be destroyed and then recreated and at the same time keep track of them and rebuild state as appropriate when we get a change. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-08-28pbrd: Properly hook back up when vrf is destroyed than recreatedDonald Sharp
Currently when a vrf is deleted than added back in PBR was not going through and touching up all the data structures that needed to be massaged to allow it to start working again. This includes: a) Search through the nexthop groups to find any nexthop that references the old nexthop id and set it right again. b) Search through the nexthop cache for nht and reset those nexthops to the right vrf as well as re-register Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com> Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-07-23Merge pull request #6730 from wesleycoakley/pbrd-dscp-ecnRuss White
DSCP / ECN-based PBR Matching
2020-07-15pbrd: dscp interpret standard codepointsWesley Coakley
Matching by dscp may now also be specified by its standard codepoint (provided it has one), such as `cf0` or `af11`. Signed-off-by: Wesley Coakley <wcoakley@nvidia.com>
2020-07-15pbrd, zebra, lib: DSCP / ECN-based PBR MatchingWesley Coakley
Extend PBR maps to discriminate by Differentiated Services Code Point and / or Explicit Congestion Notification fields. These fields are used in the IP header for classifying network traffic. 0 1 2 3 4 5 6 7 +-----+-----+-----+-----+-----+-----+-----+-----+ | DS FIELD, DSCP | ECN FIELD | +-----+-----+-----+-----+-----+-----+-----+-----+ DSCP: differentiated services codepoint ECN: Explicit Congestion Notification Signed-off-by: Wesley Coakley <wcoakley@nvidia.com> Signed-off-by: Saurav Kumar Paul <saurav@cumulusnetworks.com>
2020-07-09pbrd: nhgc state improvements when installed/removedStephen Worley
Cleanup the marking of a nhc as installed/removed based on table route installation. We were not even handling the removal state at all. We saw some timing issues with the routes being installed/removed multiple times and then never resending the pbr map due to bad states on the nhgc. Dont worry about checking if its already marked installed before scheduling the policy walk. We have a check in `pbr_send_map()` to ensure we dont try to resend a map sequence already installed. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2020-07-01pbrd, lib: remember to free alloc'd qobj on deleteWesley Coakley
Signed-off-by: Wesley Coakley <wcoakley@nvidia.com>
2020-04-09pbrd: implement `set *` and `match *` config replacementStephen Worley
Implement the ability to replace any existing `set *` or `match` with another one or adding more config without having to first delete the original config already there. Before, we needed to constantly execute a `no` command for everything to remove the rule before making changes to it. With this patch, you can replace configs on individual sequences much easier. Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2020-04-09pbrd: free nexthop_group name on `no set nexthop-group`Stephen Worley
Properly free the string pointed to by `pbrms->nhgrp_name` when we are removiing the config for a nexthop group on a pbr map sequence. Found via memleak: ==3152214== 4 bytes in 1 blocks are definitely lost in loss record 308 of 8,814 ==3152214== at 0x483980B: malloc (vg_replace_malloc.c:309) ==3152214== by 0x4DC9F7E: strdup (in /usr/lib64/libc-2.30.so) ==3152214== by 0x48E373E: qstrdup (memory.c:122) ==3152214== by 0x408FE7: pbr_map_nexthop_group_magic (pbr_vty.c:264) ==3152214== by 0x408E04: pbr_map_nexthop_group (pbr_vty_clippy.c:347) ==3152214== by 0x48ACF72: cmd_execute_command_real (command.c:1073) ==3152214== by 0x48ACB3B: cmd_execute_command (command.c:1133) ==3152214== by 0x48AD063: cmd_execute (command.c:1288) ==3152214== by 0x493D8EE: vty_command (vty.c:526) ==3152214== by 0x493D397: vty_execute (vty.c:1293) ==3152214== by 0x493C4EC: vtysh_read (vty.c:2126) ==3152214== by 0x49319DC: thread_call (thread.c:1548) Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2020-03-06*: Finish off the __PRETTY_FUNCTION__ to __func__Donald Sharp
FINISH IT Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2020-03-05*: Replace __PRETTY_FUNCTION__/__FUNCTION__ to __func__Donatas Abraitis
Just keep the code cool. Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2020-03-04*: Use short version of bool expressionsDonatas Abraitis
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
2019-12-02pbrd: only remove interface after all seq uninstalledStephen Worley
Only remove the interface from the pbr_map after we get a callback from zapi that every sequence using that interface has been removed. Before, if we created a map with multiple sequences and put that on an interface, then removed it from that interface, it would fail to mark the sequences after the first one as uninstalled. This was because we failed to lookup the other ones after we removed the interface from the pbr_map. This patch adds a conditional to only delete the interface from the pbr map if all its sequneces using that interface have been uninstalled. This patch extends the work done in 38e9ccde2f8edd6946d48c80967027d05e64d73f Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com>
2019-12-02*: generously apply constDavid Lamparter
const const const your boat, merrily down the stream... Signed-off-by: David Lamparter <equinox@diac24.net>
2019-11-21pbrd: Add `set vrf NAME` and `set vrf unchanged`Stephen Worley
`set vrf NAME` allows the pbr map to point to an arbitrary vrf table. `set vrf unchanged` will use the interface's vrf for table lookup. Further, add functionality for pbr to respond to interface events such as interface vrf changes & interface creation/deletion. Ex) ubuntu_nh# show pbr map pbr-map TEST valid: 1 Seq: 1 rule: 300 Installed: 3(1) Reason: Valid SRC Match: 3.3.3.3/32 VRF Unchanged (use interface vrf) pbr-map TEST2 valid: 1 Seq: 2 rule: 301 Installed: 3(2) Reason: Valid SRC Match: 4.4.4.4/32 VRF Lookup: vrf-red root@ubuntu_nh:/home# ip rule show 0: from all lookup local 300: from 3.3.3.3 iif dummy2 lookup main 300: from 3.3.3.3 iif dummyVRF lookup 1111 301: from 4.4.4.4 iif dummy1 lookup 1111 301: from 4.4.4.4 iif dummy3 lookup 1111 Signed-off-by: Stephen Worley <sworley@cumulusnetworks.com-
2019-09-03pbrd: initial fwmark support for pbr matches #4460Marcin Matląg
Adds support to specify marks in pbr-map match clause. Marks should be provided as decimal (unsigned int). Currently supported on Linux only. Attempting to configure marks on other platform will result in: "pbr marks are not supported on this platform" Signed-off-by: Marcin Matlag <marcin.matlag@gmail.com> Signed-off-by: Jafar Al-Gharaibeh <jafar@atcorp.com>
2019-02-25*: remove null check before XFREEQuentin Young
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2019-02-12pbrd: Do not delete pmi until completion of rule delete.Donald Sharp
When we have a pbr-policy applied to an interface and the rule is installed and then deleted, we would not properly clean up the bit field for the pmi as well as not note the rule as properly deleted. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2019-02-12pbrd: Add some missing debugs from external eventsDonald Sharp
Add some debugs from events that can happen that will influence our pbr behavior. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-20Merge pull request #2051 from donaldsharp/PBRD_EXTRARuss White
Pbrd extra
2018-04-18pbrd: fix multiple unsafe string copiesQuentin Young
Coverity #1467828 Coverity #1467827 Coverity #1467826 Coverity #1467825 Coverity #1467824 Coverity #1467823 Coverity #1467822 Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-17pbrd: Allow pbr-policy add/removal to install/remove rulesDonald Sharp
The pbrm->installed variable was being used only in a couple of places and it has no real bearing on whether or not we should install a rule or not. Remove this value. Ticket: CM-20429 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-17pbrd, zebra: Fix multiple pbr-policy installDonald Sharp
Somewhere along the way the ability to install multiple pbr-policys for the same pbr-map was lost. Add this back. There is a limitation in that we are limited to 64 interfaces per pbr-policy. Ticket: CM-20429 Signed-off-by: Donald Sharp sharpd@cumulusnetworks.com>
2018-04-17pbrd: Prevent attempt at re-install for several scenariosDonald Sharp
There exists several places we attempt to re-install the same rule. Figure out when we need to not make an attempt at doing anything and do it. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-06pbrd: adjust/remove the rule correctly when dst and/or src removedDon Slice
When the last match criteria was removed (dst-ip or src-ip), we were not deleting the rule correctly for ipv6. This fix retains the needed src-ip/dst-ip during the pbr_send_pbr_map process so the appropriate information is available for the rule delete. Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2018-04-06pbrd: fix deletion of match or src of valid pbr-mapDon Slice
When removing either the match dst or match src of a previously valid pbr map, we would just try to re-install the rule which was rejected. This fix deletes the old rule before we re-apply the new rule. Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2018-04-06pbrd: add ability to delete routes and rules correctlyDon Slice
Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2018-04-06pbrd: fix null pointer deref when showing ifacesQuentin Young
If there are no PBR interfaces configured and we do a 'show run', pbrd crashes with a NPD when it tries to dereference ifp->info. Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-06pbrd: Remove pbr_eventsDonald Sharp
The pbr_events.c file was a mistake in that it overly complicated the code and made it hard to think about what was happening. Remove all the events and just do the work where needed. Additionally rethink the sending of the pbr map to zebra and only send one notification at a time instead of having the sending function attempt to figure out what to do. Clean up some of the no form of commands to make them work properly. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com> Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com> Signed-off-by: Don Slice <dslice@cumulusnetworks.com>
2018-04-06pbrd: Cleanup CI warningsDonald Sharp
There are a bunch of CI warnings that need to be cleaned up. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>