#include <vlib/vlib.h>
#include <vnet/pg/pg.h>
#include <vnet/dhcpv6/proxy.h>
+#include <vnet/fib/ip6_fib.h>
static char * dhcpv6_proxy_error_strings[] = {
#define dhcpv6_proxy_error(n,s) s,
b0 = vlib_get_buffer (vm, bi0);
h0 = vlib_buffer_get_current (b0);
- e_h0 = (ethernet_header_t *)b0->data;
- clib_memcpy(client_src_mac, e_h0->src_address, 6);
+
/* Send to DHCPV6 server via the configured FIB */
vnet_buffer(b0)->sw_if_index[VLIB_TX] =
dpm->server_fib_index;
*/
u0 = (void *)h0 -(sizeof(*u0));
ip0 = (void *)u0 -(sizeof(*ip0));
+ e_h0 = (void *)ip0 - ethernet_buffer_header_size(b0);
+
+ clib_memcpy(client_src_mac, e_h0->src_address, 6);
switch (h0->u.msg_type) {
case DHCPV6_MSG_SOLICIT:
fib_index = im->fib_index_by_sw_if_index
[vnet_buffer(b0)->sw_if_index[VLIB_RX]];
- fib = vec_elt_at_index (im->fibs, fib_index);
+ fib = ip6_fib_get (fib_index);
fib_id = fib->table_id;
p_vss = hash_get (dpm->vss_index_by_vrf_id,
svr_fib_index = im->fib_index_by_sw_if_index
[vnet_buffer(b0)->sw_if_index[VLIB_RX]];
- svr_fib = vec_elt_at_index (im->fibs, svr_fib_index);
+ svr_fib = ip6_fib_get (svr_fib_index);
svr_fib_id = svr_fib->table_id;
if (svr_fib_id != dpm->server_fib_index ||
return s;
}
- f = find_ip6_fib_by_table_index_or_id (&ip6_main, dm->server_fib_index,
- IP6_ROUTE_FLAG_FIB_INDEX);
+ f = ip6_fib_get (dm->server_fib_index);
if (f)
fib_id = f->table_id;