summaryrefslogtreecommitdiff
path: root/pbrd/pbr_vty.c
AgeCommit message (Collapse)Author
2019-02-20pbrd: add missing newline at the end of warning messageRenato Westphal
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-02-14lib, pbrd: fix indentation of a few commandsRenato Westphal
When displaying the running configuration, we should use a single space to indent commands when necessary (and not two spaces). Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-02-14pbrd: change the "set nexthop" command to accept interface nexthopsRenato Westphal
In addition to nexthop groups, pbrd also supports the "set nexthop" command to specify the nexthop of a PBR map. This adds convenience when multiple nexthops aren't necessary. Change this command to support interface nexthops (without IP addresses) like nexthop groups do. At the end of the command, call pbr_nht_nexthop_interface_update() otherwise the interface nexthop won't be validated until we receive an interface up/down notification from zebra through the zapi protocol. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2019-02-12pbrd: If changing policy on an interface be careful what you ask forDonald Sharp
When changing policy on an interface, only delete the old_pbrm if it is different than the current, this covers the case: current config: int swp1 pbr-policy DONNA To a config entered of: int swp1 pbr-policy EVA Additionally there is no need to reinstall if we enter the same pbr-policy two times in a row. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-08-13lib, vtysh: fix inconsistent interface commands in vtyshRenato Westphal
The definition of the interface commands in vtysh.c were outdated. Currently, all daemons that call if_cmd_init() will have the "no interface IFNAME" command and the "[no] description" commands as well, so there's no need to define exceptions for these commands anymore. To fix this, make extract.pl parse the if.c file so that vtysh can get the interface commands from there automatically. Only the "interface IFNAME [vrf NAME]" must be kept in vtysh.c because it changes the vty node and thus needs special treatment. Finally, make pimd and pbrd display interface descriptions on "sh run" when they are configured. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2018-06-13pbrd: add logging messages when out of table id'sQuentin Young
* Add log messages to indicate when we have run out of table IDs * Increase minimum range size to 1000 to reduce risk of hitting this Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-13pbrd, lib: move PBR_STR def. to libQuentin Young
Per request Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-12pbrd: use PBR_STRQuentin Young
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-12pbrd: remove json optionsQuentin Young
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-06-12pbrd: allow configurable table id rangeQuentin Young
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-05-15pbrd: Fix compilation warn -> errorDonald Sharp
The buffer size was insufficiently sized to hold the entirety of the data being passed in. Modify the nht code to use a bit bigger buffer. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-05-08pbrd, vtysh: Limit range to actual 1-700Donald Sharp
The range for sequence numbers needs to be limited by the range we have currently choosen for rule ranges. Ticket: CM-20562 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-05-02pbrd: Fix nearly impossible truncationDonald Sharp
Since we are writing into the name field which is PBR_MAP_NAMELEN size, we are expecting this to field to be at max 100 bytes. Newer compilers understand that the %s portion may be up to 100 bytes( because of the size of the string. The %u portion is expected to be 10 bytes. So in `theory` there are situations where we might truncate. The reality this is never going to happen( who is going to create a nexthop group name that is over say 30 characters? ). As such we are expecting the calling function to subtract 10 from the size_t l before we pass it in to get around this new gcc fun. Fixes: #2163 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-23pbrd: Fix a couple SA issuesDonald Sharp
1) addr will never be non-null because of the way we build the cli at this point in time, but the SA system does not understand this, add a bread crumb for it. 2) Fix a possible memory leak of the pbr_ifp 3) Fix possible integer overflow when bit shifting. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-20Merge pull request #2051 from donaldsharp/PBRD_EXTRARuss White
Pbrd extra
2018-04-18pbrd: remove pbr-policy resource leakQuentin Young
Removing a non-existent pbr-policy caused a pbr_interface to leak. Coverity #1467829 Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-18pbrd: remove unsafe string copyQuentin Young
A user could overflow the pbr_ifp->mapname buffer by entering a pbr-map name longer than 100 characters. Coverity #1467821 Coverity #1467821 Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-17pbrd: move debug vty into pbr_vty.cQuentin Young
Dev docs say that CLI goes in _vty.c files Signed-off-by: Quentin Young <qlyoung@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-17lib, pbrd: Do not allow v6 LL nexthops to be specified without an interface.Donald Sharp
Prevent the creation of a v6 LL nexthop that does not include an interface for proper resolution. Ticket: CM-20276 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: Remove table and rule range commandsDonald Sharp
Since PBR is meant to be for small deployments, allowing end users to arbitrarily change rule and table ranges without some more careful thought on what is going on and how to do it, sets us up for issues. At this time remove these knobs. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-06pbrd: Indicate command failure a bit betterDonald Sharp
When a command is attempted to be configed and it fails to be installed, indicate via vtysh return codes that we did not accept the command Ticket: CM-20216 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-06pbrd: Do not use vrf_frame for pbrms displayDonald Sharp
When displaying a pbr map sequence for a show run do not use the vty_frame construct. We should display the config even if we do not have much to display. Ticket: CM-20196 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-06pbrd: Reduce range so we cannot go over the vrf ruleDonald Sharp
The linux kernel puts the vrf rule at 1000, since pbr rules need to be before this rule, don't allow us to go beyond. Ticket: CM-19946 Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-06pbrd: Prevent crash from partially configured interfaceDonald Sharp
If an interface is in the process of coming up or partially deconfigured, prevent pbrd from crashing Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-06pbrd: If we get the same prefix safely ignoreDonald Sharp
If the match src-ip or dst-ip command entered has already been received and it's the same prefix, we are done and do not need to do anything more. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-04-06lib, pbrd: rm extra space when displaying nexthopQuentin Young
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2018-04-06pbrd: Only allow one nexthop group or nexthop at a timeDonald Sharp
When we are entering 'set nexthop' and 'set nexthop-group' ensure that the cli only allows one of these to happen at a time. Ticket: CM-20125 Signed-off-by: Donald Sharp <sharpd@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>
2018-04-06pbrd: Add PBR to FRRDonald Sharp
This is an implementation of PBR for FRR. This implemenation uses a combination of rules and tables to determine how packets will flow. PBR introduces a new concept of 'nexthop-groups' to specify a group of nexthops that will be used for ecmp. Nexthop-groups are specified on the cli via: nexthop-group DONNA nexthop 192.168.208.1 nexthop 192.168.209.1 nexthop 192.168.210.1 ! PBR sees the nexthop-group and installs these as a default route with these nexthops starting at table 10000 robot# show pbr nexthop-groups Nexthop-Group: DONNA Table: 10001 Valid: 1 Installed: 1 Valid: 1 nexthop 192.168.209.1 Valid: 1 nexthop 192.168.210.1 Valid: 1 nexthop 192.168.208.1 I have also introduced the ability to specify a table in a 'show ip route table XXX' to see the specified tables. robot# show ip route table 10001 Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, P - PIM, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR, > - selected route, * - FIB route F>* 0.0.0.0/0 [0/0] via 192.168.208.1, enp0s8, 00:14:25 * via 192.168.209.1, enp0s9, 00:14:25 * via 192.168.210.1, enp0s10, 00:14:25 PBR tracks PBR-MAPS via the pbr-map command: ! pbr-map EVA seq 10 match src-ip 4.3.4.0/24 set nexthop-group DONNA ! pbr-map EVA seq 20 match dst-ip 4.3.5.0/24 set nexthop-group DONNA ! pbr-maps can have 'match src-ip <prefix>' and 'match dst-ip <prefix>' to affect decisions about incoming packets. Additionally if you only have one nexthop to use for a pbr-map you do not need to setup a nexthop-group and can specify 'set nexthop XXXX'. To apply the pbr-map to an incoming interface you do this: interface enp0s10 pbr-policy EVA ! When a pbr-map is applied to interfaces it can be installed into the kernel as a rule: [sharpd@robot frr1]$ ip rule show 0: from all lookup local 309: from 4.3.4.0/24 iif enp0s10 lookup 10001 319: from all to 4.3.5.0/24 iif enp0s10 lookup 10001 1000: from all lookup [l3mdev-table] 32766: from all lookup main 32767: from all lookup default [sharpd@robot frr1]$ ip route show table 10001 default proto pbr metric 20 nexthop via 192.168.208.1 dev enp0s8 weight 1 nexthop via 192.168.209.1 dev enp0s9 weight 1 nexthop via 192.168.210.1 dev enp0s10 weight 1 The linux kernel now will use the rules and tables to properly apply these policies. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com> Signed-off-by: Don Slice <dslice@cumulusnetworks.com> Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>