- struct prefix_sg sg;
- struct prefix msg_source_addr;
- struct pim_assert_metric msg_metric;
- int offset;
- uint8_t *curr;
- int curr_size;
- struct pim_interface *pim_ifp = NULL;
-
- on_trace(__PRETTY_FUNCTION__, ifp, src_addr);
-
- curr = buf;
- curr_size = buf_size;
-
- /*
- Parse assert group addr
- */
- memset (&sg, 0, sizeof (struct prefix_sg));
- offset = pim_parse_addr_group (&sg, curr, curr_size);
- if (offset < 1) {
- char src_str[INET_ADDRSTRLEN];
- pim_inet4_dump("<src?>", src_addr, src_str, sizeof(src_str));
- zlog_warn("%s: pim_parse_addr_group() failure: from %s on %s",
- __PRETTY_FUNCTION__,
- src_str, ifp->name);
- return -1;
- }
- curr += offset;
- curr_size -= offset;
-
- /*
- Parse assert source addr
- */
- offset = pim_parse_addr_ucast (&msg_source_addr, curr, curr_size);
- if (offset < 1) {
- char src_str[INET_ADDRSTRLEN];
- pim_inet4_dump("<src?>", src_addr, src_str, sizeof(src_str));
- zlog_warn("%s: pim_parse_addr_ucast() failure: from %s on %s",
- __PRETTY_FUNCTION__,
- src_str, ifp->name);
- return -2;
- }
- curr += offset;
- curr_size -= offset;
-
- if (curr_size != 8) {
- char src_str[INET_ADDRSTRLEN];
- pim_inet4_dump("<src?>", src_addr, src_str, sizeof(src_str));
- zlog_warn("%s: preference/metric size is not 8: size=%d from %s on interface %s",
- __PRETTY_FUNCTION__,
- curr_size,
- src_str, ifp->name);
- return -3;
- }
-
- /*
- Parse assert metric preference
- */
-
- msg_metric.metric_preference = pim_read_uint32_host(curr);
-
- msg_metric.rpt_bit_flag = msg_metric.metric_preference & 0x80000000; /* save highest bit */
- msg_metric.metric_preference &= ~0x80000000; /* clear highest bit */
-
- curr += 4;
-
- /*
- Parse assert route metric
- */
-
- msg_metric.route_metric = pim_read_uint32_host(curr);
-
- if (PIM_DEBUG_PIM_TRACE) {
- char neigh_str[INET_ADDRSTRLEN];
- char source_str[INET_ADDRSTRLEN];
- char group_str[INET_ADDRSTRLEN];
- pim_inet4_dump("<neigh?>", src_addr, neigh_str, sizeof(neigh_str));
- pim_inet4_dump("<src?>", msg_source_addr.u.prefix4, source_str, sizeof(source_str));
- pim_inet4_dump("<grp?>", sg.grp, group_str, sizeof(group_str));
- zlog_debug("%s: from %s on %s: (S,G)=(%s,%s) pref=%u metric=%u rpt_bit=%u",
- __PRETTY_FUNCTION__, neigh_str, ifp->name,
- source_str, group_str,
- msg_metric.metric_preference,
- msg_metric.route_metric,
- PIM_FORCE_BOOLEAN(msg_metric.rpt_bit_flag));
- }
-
- msg_metric.ip_address = src_addr;
-
- pim_ifp = ifp->info;
- zassert(pim_ifp);
- ++pim_ifp->pim_ifstat_assert_recv;
-
- return dispatch_assert(ifp,
- msg_source_addr.u.prefix4,
- sg.grp,
- msg_metric);
+ struct prefix_sg sg;
+ struct prefix msg_source_addr;
+ struct pim_assert_metric msg_metric;
+ int offset;
+ uint8_t *curr;
+ int curr_size;
+ struct pim_interface *pim_ifp = NULL;
+
+ on_trace(__PRETTY_FUNCTION__, ifp, src_addr);
+
+ curr = buf;
+ curr_size = buf_size;
+
+ /*
+ Parse assert group addr
+ */
+ memset(&sg, 0, sizeof(struct prefix_sg));
+ offset = pim_parse_addr_group(&sg, curr, curr_size);
+ if (offset < 1) {
+ char src_str[INET_ADDRSTRLEN];
+ pim_inet4_dump("<src?>", src_addr, src_str, sizeof(src_str));
+ zlog_warn("%s: pim_parse_addr_group() failure: from %s on %s",
+ __PRETTY_FUNCTION__, src_str, ifp->name);
+ return -1;
+ }
+ curr += offset;
+ curr_size -= offset;
+
+ /*
+ Parse assert source addr
+ */
+ offset = pim_parse_addr_ucast(&msg_source_addr, curr, curr_size);
+ if (offset < 1) {
+ char src_str[INET_ADDRSTRLEN];
+ pim_inet4_dump("<src?>", src_addr, src_str, sizeof(src_str));
+ zlog_warn("%s: pim_parse_addr_ucast() failure: from %s on %s",
+ __PRETTY_FUNCTION__, src_str, ifp->name);
+ return -2;
+ }
+ curr += offset;
+ curr_size -= offset;
+
+ if (curr_size != 8) {
+ char src_str[INET_ADDRSTRLEN];
+ pim_inet4_dump("<src?>", src_addr, src_str, sizeof(src_str));
+ zlog_warn(
+ "%s: preference/metric size is not 8: size=%d from %s on interface %s",
+ __PRETTY_FUNCTION__, curr_size, src_str, ifp->name);
+ return -3;
+ }
+
+ /*
+ Parse assert metric preference
+ */
+
+ msg_metric.metric_preference = pim_read_uint32_host(curr);
+
+ msg_metric.rpt_bit_flag = msg_metric.metric_preference
+ & 0x80000000; /* save highest bit */
+ msg_metric.metric_preference &= ~0x80000000; /* clear highest bit */
+
+ curr += 4;
+
+ /*
+ Parse assert route metric
+ */
+
+ msg_metric.route_metric = pim_read_uint32_host(curr);
+
+ if (PIM_DEBUG_PIM_TRACE) {
+ char neigh_str[INET_ADDRSTRLEN];
+ char source_str[INET_ADDRSTRLEN];
+ char group_str[INET_ADDRSTRLEN];
+ pim_inet4_dump("<neigh?>", src_addr, neigh_str,
+ sizeof(neigh_str));
+ pim_inet4_dump("<src?>", msg_source_addr.u.prefix4, source_str,
+ sizeof(source_str));
+ pim_inet4_dump("<grp?>", sg.grp, group_str, sizeof(group_str));
+ zlog_debug(
+ "%s: from %s on %s: (S,G)=(%s,%s) pref=%u metric=%u rpt_bit=%u",
+ __PRETTY_FUNCTION__, neigh_str, ifp->name, source_str,
+ group_str, msg_metric.metric_preference,
+ msg_metric.route_metric,
+ PIM_FORCE_BOOLEAN(msg_metric.rpt_bit_flag));
+ }
+
+ msg_metric.ip_address = src_addr;
+
+ pim_ifp = ifp->info;
+ zassert(pim_ifp);
+ ++pim_ifp->pim_ifstat_assert_recv;
+
+ return dispatch_assert(ifp, msg_source_addr.u.prefix4, sg.grp,
+ msg_metric);