]> git.puffer.fish Git - mirror/frr.git/commitdiff
pimd: Pass in upstream to pim_msg_join_prune_encode.
authorDonald Sharp <sharpd@cumulusnetworks.com>
Mon, 31 Oct 2016 13:03:57 +0000 (09:03 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 22 Dec 2016 01:26:12 +0000 (20:26 -0500)
Pass in the upstream data structure to pim_msg_join_prune_encode
so it can decide to send (S,G,rpt) information if it wants to or
not.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
pimd/pim_join.c
pimd/pim_msg.c
pimd/pim_msg.h

index b4dd8e146651a4fe921e4f6b779a134bcb09da6e..dcbd122151084618e61bcfc5111aa22a417aee9c 100644 (file)
@@ -399,7 +399,7 @@ int pim_joinprune_send(struct interface *ifp,
                       int send_join)
 {
   struct pim_interface *pim_ifp;
-  uint8_t pim_msg[1000];
+  uint8_t pim_msg[9000];
   int pim_msg_size;
 
   on_trace (__PRETTY_FUNCTION__, ifp, upstream_addr);
@@ -450,9 +450,8 @@ int pim_joinprune_send(struct interface *ifp,
   /*
     Build PIM message
   */
-  pim_msg_size = pim_msg_join_prune_encode (pim_msg, 1000, send_join,
-                                           up->sg.src, up->sg.grp,
-                                           upstream_addr, PIM_JP_HOLDTIME);
+  pim_msg_size = pim_msg_join_prune_encode (pim_msg, 9000, send_join,
+                                           up, upstream_addr, PIM_JP_HOLDTIME);
 
   if (pim_msg_size < 0)
     return pim_msg_size;
index edc7f0ee42fa8369f950a80362303913d7af53dd..749cee96e954d5d6330360b99e730029a5d05451 100644 (file)
@@ -115,7 +115,7 @@ pim_msg_addr_encode_ipv4_source(uint8_t *buf, int buf_size,
 
 int
 pim_msg_join_prune_encode (uint8_t *buf, int buf_size, int is_join,
-                          struct in_addr source, struct in_addr group,
+                          struct pim_upstream *up,
                           struct in_addr upstream, int holdtime)
 {
   uint8_t *pim_msg = buf;
@@ -153,10 +153,10 @@ pim_msg_join_prune_encode (uint8_t *buf, int buf_size, int is_join,
 
   remain = end - pim_msg_curr;
   pim_msg_curr = pim_msg_addr_encode_ipv4_group (pim_msg_curr, remain,
-                                                 group);
+                                                up->sg.grp);
   if (!pim_msg_curr) {
     char group_str[INET_ADDRSTRLEN];
-    pim_inet4_dump("<grp?>", group, group_str, sizeof(group_str));
+    pim_inet4_dump("<grp?>", up->sg.grp, group_str, sizeof(group_str));
     zlog_warn("%s: failure encoding group address %s: space left=%d",
              __PRETTY_FUNCTION__, group_str, remain);
     return -5;
@@ -180,21 +180,21 @@ pim_msg_join_prune_encode (uint8_t *buf, int buf_size, int is_join,
   ++pim_msg_curr;
 
   remain = end - pim_msg_curr;
-  if (source.s_addr == INADDR_ANY)
+  if (up->sg.src.s_addr == INADDR_ANY)
     {
-      struct pim_rpf *rpf = pim_rp_g (group);
+      struct pim_rpf *rpf = pim_rp_g (up->sg.grp);
       bits = PIM_ENCODE_SPARSE_BIT | PIM_ENCODE_WC_BIT | PIM_ENCODE_RPT_BIT;
       stosend = rpf->rpf_addr.u.prefix4;
     }
   else
     {
       bits = PIM_ENCODE_SPARSE_BIT;
-      stosend = source;
+      stosend = up->sg.src;
     }
   pim_msg_curr = pim_msg_addr_encode_ipv4_source (pim_msg_curr, remain, stosend, bits);
   if (!pim_msg_curr) {
     char source_str[INET_ADDRSTRLEN];
-    pim_inet4_dump("<src?>", source, source_str, sizeof(source_str));
+    pim_inet4_dump("<src?>", up->sg.src, source_str, sizeof(source_str));
     zlog_warn("%s: failure encoding source address %s: space left=%d",
              __PRETTY_FUNCTION__, source_str, remain);
     return -7;
index 1bd8207cc1e5f7aa5e00ed24c58b1163c2d47203..78ff569b7cd7bd45c54c361d773698b78d0941fe 100644 (file)
@@ -55,6 +55,6 @@ uint8_t *pim_msg_addr_encode_ipv4_source(uint8_t *buf,
 
 
 int pim_msg_join_prune_encode (uint8_t *buf, int buf_size, int is_join,
-                              struct in_addr source, struct in_addr group,
+                              struct pim_upstream *up,
                               struct in_addr upstream, int holdtime);
 #endif /* PIM_MSG_H */