Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
fib: Source Address Selection
[vpp.git]
/
src
/
plugins
/
igmp
/
igmp_pkt.c
diff --git
a/src/plugins/igmp/igmp_pkt.c
b/src/plugins/igmp/igmp_pkt.c
index
5dd829d
..
8912e5a
100644
(file)
--- a/
src/plugins/igmp/igmp_pkt.c
+++ b/
src/plugins/igmp/igmp_pkt.c
@@
-16,6
+16,7
@@
*/
#include <igmp/igmp_pkt.h>
*/
#include <igmp/igmp_pkt.h>
+#include <vnet/fib/fib_sas.h>
static void
vlib_buffer_append (vlib_buffer_t * b, uword l)
static void
vlib_buffer_append (vlib_buffer_t * b, uword l)
@@
-27,7
+28,6
@@
vlib_buffer_append (vlib_buffer_t * b, uword l)
static vlib_buffer_t *
igmp_pkt_get_buffer (igmp_pkt_build_t * bk)
{
static vlib_buffer_t *
igmp_pkt_get_buffer (igmp_pkt_build_t * bk)
{
- vlib_buffer_free_list_t *fl;
vlib_main_t *vm;
vlib_buffer_t *b;
u32 bi;
vlib_main_t *vm;
vlib_buffer_t *b;
u32 bi;
@@
-38,8
+38,6
@@
igmp_pkt_get_buffer (igmp_pkt_build_t * bk)
return (NULL);
b = vlib_get_buffer (vm, bi);
return (NULL);
b = vlib_get_buffer (vm, bi);
- fl = vlib_buffer_get_free_list (vm, VLIB_BUFFER_DEFAULT_FREE_LIST_INDEX);
- vlib_buffer_init_for_free_list (b, fl);
VLIB_BUFFER_TRACE_TRAJECTORY_INIT (b);
b->flags |= VNET_BUFFER_F_LOCALLY_ORIGINATED;
VLIB_BUFFER_TRACE_TRAJECTORY_INIT (b);
b->flags |= VNET_BUFFER_F_LOCALLY_ORIGINATED;
@@
-73,14
+71,13
@@
igmp_pkt_build_ip_header (igmp_pkt_build_t * bk,
return (NULL);
ip4 = vlib_buffer_get_current (b);
return (NULL);
ip4 = vlib_buffer_get_current (b);
- memset (ip4, 0, sizeof (ip4_header_t));
+
clib_
memset (ip4, 0, sizeof (ip4_header_t));
ip4->ip_version_and_header_length = 0x46;
ip4->ttl = 1;
ip4->protocol = IP_PROTOCOL_IGMP;
ip4->tos = 0xc0;
ip4->ip_version_and_header_length = 0x46;
ip4->ttl = 1;
ip4->protocol = IP_PROTOCOL_IGMP;
ip4->tos = 0xc0;
- ip4_src_address_for_packet (&ip4_main.lookup_main,
- bk->sw_if_index, &ip4->src_address);
+ fib_sas4_get (bk->sw_if_index, NULL, &ip4->src_address);
vlib_buffer_append (b, sizeof (*ip4));
bk->n_avail -= sizeof (*ip4);
vlib_buffer_append (b, sizeof (*ip4));
bk->n_avail -= sizeof (*ip4);
@@
-92,14
+89,14
@@
igmp_pkt_build_ip_header (igmp_pkt_build_t * bk,
break;
case IGMP_MSG_QUERY:
if (group != NULL)
break;
case IGMP_MSG_QUERY:
if (group != NULL)
- clib_memcpy (&ip4->dst_address, &group->key->ip4,
- sizeof (ip4_address_t));
+ clib_memcpy
_fast
(&ip4->dst_address, &group->key->ip4,
+
sizeof (ip4_address_t));
else
ip4->dst_address.as_u32 = IGMP_GENERAL_QUERY_ADDRESS;
break;
}
else
ip4->dst_address.as_u32 = IGMP_GENERAL_QUERY_ADDRESS;
break;
}
- /* add the router alert opt
nio
s */
+ /* add the router alert opt
ion
s */
option = vlib_buffer_get_current (b);
option[0] = 0x80 | 20; // IP4_ROUTER_ALERT_OPTION;
option[1] = 4; // length
option = vlib_buffer_get_current (b);
option[0] = 0x80 | 20; // IP4_ROUTER_ALERT_OPTION;
option[1] = 4; // length
@@
-148,6
+145,10
@@
igmp_pkt_tx (igmp_pkt_build_t * bk)
vm = vlib_get_main ();
config = igmp_config_lookup (bk->sw_if_index);
vm = vlib_get_main ();
config = igmp_config_lookup (bk->sw_if_index);
+
+ if (NULL == config)
+ return;
+
f = vlib_get_frame_to_node (vm, ip4_rewrite_mcast_node.index);
to_next = vlib_frame_vector_args (f);
f = vlib_get_frame_to_node (vm, ip4_rewrite_mcast_node.index);
to_next = vlib_frame_vector_args (f);
@@
-398,7
+399,7
@@
igmp_pkt_report_v3_add_group (igmp_pkt_build_report_t * br,
void
igmp_pkt_build_report_init (igmp_pkt_build_report_t * br, u32 sw_if_index)
{
void
igmp_pkt_build_report_init (igmp_pkt_build_report_t * br, u32 sw_if_index)
{
- memset (br, 0, sizeof (*br));
+
clib_
memset (br, 0, sizeof (*br));
br->base.sw_if_index = sw_if_index;
}
br->base.sw_if_index = sw_if_index;
}
@@
-521,7
+522,7
@@
igmp_pkt_query_v3_send (igmp_pkt_build_query_t * bq)
void
igmp_pkt_build_query_init (igmp_pkt_build_query_t * bq, u32 sw_if_index)
{
void
igmp_pkt_build_query_init (igmp_pkt_build_query_t * bq, u32 sw_if_index)
{
- memset (bq, 0, sizeof (*bq));
+
clib_
memset (bq, 0, sizeof (*bq));
bq->base.sw_if_index = sw_if_index;
}
bq->base.sw_if_index = sw_if_index;
}