saravanank <saravanank@vmware.com>: Author Summary

Builds triggered by saravanank <saravanank@vmware.com>

Builds triggered by an author are those builds which contains changes committed by the author.
9
3 (33%)
6 (67%)

Breakages and fixes

Broken means the build has failed but the previous build was successful.
Fixed means that the build was successful but the previous build has failed.
0 (0% of all builds triggered)
1 (11% of all builds triggered)
1
Build Completed Code commits Tests
FRR › FRR › #2340 2 months ago
pimd: fix DR at LHR scenario where non DR is connected to RP
In Scenario where receiver is present in a subnet where 2 or more pim mrouters.
When IGMP query received on a DR interface and RP is reachable through non DR.
Currently we are blocking to create upstream where iif == oif. So pim join
not generated towards RP. We have to allow the DR router in the network to create an upstream.

Signed-off-by: Saravanan K <saravanank@vmware.com>
8190 passed
FRR › FRR › #2334 2 months ago
pimd: Fixing encoded group & source address packing in right byte order
Position of address family and encoding type is defined wrongly in the
packed structure. This will correct the position as per RFC 4601 4.9.1

Signed-off-by: Saravanan K <saravanank@vmware.com>
8194 passed
FRR › FRR › #2240 3 months ago
pimd: Datastructure for BSM interface configuration and statistics
Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: clear pim bsm traffic counters for BSM
Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: semantic fragmentation of Bootstrap messages w.r.t interface mtu
PIM BSM format is defined in RFC 5059. Also in pim_bsm.h for quick reference.

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: PIM Msg header includes N bit as defined by RFC
This commit includes parsing of Nbit and contructing pim hdr with Nbit
Adding Nbit to PIm hdr structure
Adding Scope zone bit and Bidir bit to Encoded IPv4 Group Address

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: PIM Bootstrap packet processing
1. Packet validation as per RFC 5059 Sec 3.1.3
We won't supporting scope zone BSM as of now, they are dropped now.
Order of the check slightly be changed in code for optimization.

   if ((DirectlyConnected(BSM.src_ip_address) == FALSE) OR
        (we have no Hello state for BSM.src_ip_address)) {
     drop the Bootstrap message silently
   }

   if (BSM.dst_ip_address == ALL-PIM-ROUTERS) {
     if (BSM.no_forward_bit == 0) {
       if (BSM.src_ip_address != RPF_neighbor(BSM.BSR_ip_address)) {
         drop the Bootstrap message silently
       }
     } else if ((any previous BSM for this scope has been accepted) OR
                (more than BS_Period has elapsed since startup)) {
       #only accept no-forward BSM if quick refresh on startup
       drop the Bootstrap message silently
     }
   } else if ((Unicast BSM support enabled) AND
              (BSM.dst_ip_address is one of my addresses)) {
     if ((any previous BSM for this scope has been accepted) OR
         (more than BS_Period has elapsed since startup)) {
       #the packet was unicast, but this wasn't
       #a quick refresh on startup
       drop the Bootstrap message silently
     }
   } else {
     drop the Bootstrap message silently
   }

2. Nexthop tracking registration for BSR
3. RPF check for BSR Message.
   Zebra Lookup based rpf check for new BSR
   NHT cache(pnc) based lookup for old BSR

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: Enable BSM processing on all interfaces by default
set the flags for bsm processing and unicast bsm processing to true during pim interface creation
pimd: PIM BSM Processing bootstrap timer expiry handling
When bs time out occurs,
1. Delete the bsm list
2. Reset the BSR address
3. delete nexthop tracking for the expired BSR
4. Give one more lease of life to all the bsr advertised rp with hold time
5. clear partial list of each grp node if not empty

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: store PIM bootstrap message in list and forward if no_fwd not set
If no_fwd bit not set,
forward on all interfaces including which it came.
store it in bsm list with size for forwarding it later to new neighbor.
calculate PIM mtu of the interface, if bsm size is more do sematic frag and send

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: PIM nexthop tracking changes for tracking nexthop path of BSR.
Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: BSM related memory definition to static and function reordering
Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: adding datastructure to accomodate to source of RP.
After the introduction of BSR Message processing, source of RP can be either
static or BSR Message.

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: Instate partial rp_list(when its full) to bsrp_list(main list).
When all rp received on a partial list, this routine is called.
if static rp configured for the group range
    if partial list is empty
         clean main list and partial list
    else
         replace main with partial and start the g2rp timer with head of new main
    return

if main list was empty
    call rp new with head of partial list and start g2rp timer.
else
    if partial list is empty
         call rp del
    else
         stop g2rp timer of old elected rp.
         call rp change with new rp(head of partial list) and start g2rp timer.

swap the lists and clean the old list(now partial list).

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: Forwarding the stored BSM to new neighbor or restarted neighbor
Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: Implement show ip pim bsm-database
This command shows all the fragments of the last received preferred BSM.
This displayed in readable format.

Sw3# sh ip pim bsm-database
Scope Zone: Global
Number of the fragments: 1

BSM Fragment : 1
------------------
BSR-Address     BSR-Priority    Hashmask-len    Fragment-Tag
30.0.0.100      0               0               3289

Group : 225.1.1.1/32
-------------------
Rp Count:9
Fragment Rp Count : 9
RpAddress     HoldTime     Priority
20.0.0.2        150          0
2.2.2.2         150          0
9.9.9.10        150          0
7.7.2.7         150          0
7.2.2.7         150          0
7.7.9.7         150          0
7.8.9.10        150          0
7.5.2.7         150          0
9.10.9.10       150          0

Group : 226.1.1.1/32
-------------------
Rp Count:1
Fragment Rp Count : 1
RpAddress     HoldTime     Priority
9.9.9.9         150          0

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: Implementation of show ip pim bsrp-info.
This command displays the group to rp mappings received from BSR.

Sw3# show ip pim bsrp-info
BSR Address  30.0.0.100
Group Address 225.1.1.1/32
--------------------------
Rp Address      priority        Holdtime        Hash
(ACTIVE)
20.0.0.2        0               150             1533588312
2.2.2.2         0               150             1524600152
9.9.9.10        0               150             1489835248
7.7.2.7         0               150             1230207135
7.2.2.7         0               150             1093826719
7.7.9.7         0               150             897086367
7.8.9.10        0               150             811603184
7.5.2.7         0               150             746158239
9.10.9.10       0               150             658117872
(PENDING)
Pending RP count :0
Partial List is empty.

Group Address 226.1.1.1/32
--------------------------
Rp Address      priority        Holdtime        Hash
(ACTIVE)
9.9.9.9         0               150             326773161
(PENDING)
Pending RP count :0
Partial List is empty.

Signed-off-by: Saravanan K <saravanank@vmware.com>
doc: updating pim.rst with bsm processing commands
Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: PIM BSM Processing datastructure definition/initialization/deinit
Apart from datastructure, bsm scope initialization and deinitialiation
routines called during pim instance init and deinit. Also makefile changes.

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: PIM BSM Processing g2rp timer start and expiry routine(dummy)
Expiry routine to be updated in later commit

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: Implement show & clear ip pim statistics command
This would show only bsm related statistics for now.
We shall add more statistics to this later.

Sw3# show ip pim statistics
BSM Statistics :
----------------
Number of Received BSMs : 1584
Number of Forwared BSMs : 793
Number of Dropped BSMs  : 1320

Interface : ens192
-------------------
Number of BSMs dropped due to config miss : 0
Number of unicast BSMs dropped : 0
Number of BSMs dropped due to invalid scope zone : 0

Interface : ens224
-------------------
Number of BSMs dropped due to config miss : 0
Number of unicast BSMs dropped : 0
Number of BSMs dropped due to invalid scope zone : 0

Interface : ens256
-------------------
Number of BSMs dropped due to config miss : 0
Number of unicast BSMs dropped : 0
Number of BSMs dropped due to invalid scope zone : 0

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: Implementation of show ip pim bsr command
Command to display current bsr, last received bsm ts, bsr uptime

Sw3# sh ip pim bsr
PIMv2 Bootstrap information
Current preferred BSR address: 30.0.0.100
Priority        Fragment-Tag       State           UpTime
  0               6390            ACCEPT_PREFERRED    91:26:24
Last BSM seen: 00:00:37

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: implement debug pim bsm command
Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: cli changes to show BSM statistics in show ip pim int traffic
Signed-off-by: Saravanan K <saravanank@vmware.com>
lib: implement utility function API which does the following
1. listnode_add_sort_nodup - This API adds to list only if no duplicate
    element available in the list. returns true/false
2. list_filter_out_nodes - This API deletes the nodes which satisfy the given
    condition. condition is passed as a func ptr in
    API. This function takes in node data(void ptr).

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: interface commands to enable/disable bsm processing
(intf)ip pim bsm - to enable bsm processing on the interface
(intf)no ip pim bsm - to disable bsm processing on the interface
(intf)ip pim unicast-bsm - to enable ucast bsm processing on the interface
(intf)no ip pim unicast-bsm - to disable ucast bsm processing on the interface

Note: bsm processing and ucast bsm processing is enabled by default on a
pim interface. The CLI is implemented as a security feature as recommended by
RFC 5059

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: Implement nexthop match where if given address match any of the next hop in ecmp case
For each BSM packet, rpf check is performed. We will be accepting if the
source address match any of the next hop neighbor(in ecmp case) to reach
the Bootstrap Router.

1. pim_nexthop_match - this lookup in zebra and return true if any of the
                       next hop nbr is matching (in ecmp case).
2. pim_nexthop_match_nht_cache - this api searches the given address in local
                                 pnc and return true if any of the next hop
                                 nbr is matching (in ecmp case).

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: Parse the grp2rp mapping from BSM pkt and add to partial rp list
Bootstrap rp table is route_table datastructure with group range as key.
Each node represents a group range.
Every node has two lists of rp nodes. partial list and active list(bsrp_list)
Whenever a rp is parsed from BSM, it is updated to partial list.
When partial list is full, we move it to main list(bsrp_list). This commit doesn't cover that.
Rp Election routine based on RFC 7761 Sec 4.7
Hash calculation for rp election based on RFC 7761 Sec 4.7.2

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: PIM BSM processing, grp2rp mapping timer expiry
DS Overview:
Bootstrap RP table has grp node.
scope --> rp table --> grp node1 --> rp list --> rp nodes(g2rp timer)
             |
              -------> grp node2 --> rp list --> rp nodes(g2rp timer)

When grp2rp mapping expires, following has to be done.
1. delete the rp node from the active bs-rp list in the list
2. calculate the elapsed time for other rp nodes in the list
3. delete those nodes having more elapse time than their hold time
4. If the list is not empty and current rp src is not static
   rp change with new rp(head) & start g2rp timer with value holdtime - elapse
5. If the list is empty and current rp src for the grp is not static
   delete the rp
6. If the list is not empty and current rp is static, just start the
   g2rp timer with value holdtime - elapse
7. If list is empty and pending list is empty, delete grp node.

Note: g2rp timer will be run only on elected RP node for optimization.
      when it expires, other node are update with elapse time.
      This list is sorted insuch way that elected RP is the HEAD of list

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: Show RP source in show ip pim rp-info command
Sw3# sh ip pim rp-info
RP address       group/prefix-list   OIF         I am RP     Source
20.0.0.2         225.1.1.1/32        ens192            no           BSR
9.9.9.9          226.1.1.1/32        (Unknown)         no           BSR
30.0.0.100       229.1.1.5/32        ens192            no        Static

Signed-off-by: Saravanan K <saravanank@vmware.com>
pimd: rp_new & rp_del split into 2 tier functions & implement rp_change
pim_rp_new split into pim_rp_new_config and pim_rp_new.
pim_rp_new_config is called by CLI.
pim_rp_new will be called by pim_rp_new_config and bsm rp config.

pim_rp_del is split into pim_rp_del_config and pim_rp_del
pim_rp_del_config is called by CLI.
pim_rp_del is called by pim_rp_del_config and bsm rp config

Signed-off-by: Saravanan K <saravanank@vmware.com>
7766 passed
You have insufficient permissions to see all of the builds.
Build Completed Code commits Tests
Build Completed Code commits Tests
You have insufficient permissions to see all of the builds.