X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Funix%2Ftuntap.c;h=6834ee88c993c897762626d526e67892f3474cc6;hb=9a3973e3a36bfd4dd8dbffe130a92649fc1b73d3;hp=4a9bd46c31c37bbd6fac4414f2197cf98cd86662;hpb=bdc0e6b7204ea0211d4f7881497e4306586fb9ef;p=vpp.git diff --git a/src/vnet/unix/tuntap.c b/src/vnet/unix/tuntap.c index 4a9bd46c31c..6834ee88c99 100644 --- a/src/vnet/unix/tuntap.c +++ b/src/vnet/unix/tuntap.c @@ -146,7 +146,7 @@ static tuntap_main_t tuntap_main = { static uword tuntap_tx (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { - u32 *buffers = vlib_frame_args (frame); + u32 *buffers = vlib_frame_vector_args (frame); uword n_packets = frame->n_vectors; tuntap_main_t *tm = &tuntap_main; vnet_main_t *vnm = vnet_get_main (); @@ -166,7 +166,8 @@ tuntap_tx (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) if (tm->is_ether && (!tm->have_normal_interface)) { vlib_buffer_reset (b); - clib_memcpy (vlib_buffer_get_current (b), tm->ether_dst_mac, 6); + clib_memcpy_fast (vlib_buffer_get_current (b), tm->ether_dst_mac, + 6); } /* Re-set iovecs if present. */ @@ -242,7 +243,7 @@ tuntap_rx (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) tuntap_main_t *tm = &tuntap_main; vlib_buffer_t *b; u32 bi; - const uword buffer_size = VLIB_BUFFER_DATA_SIZE; + const uword buffer_size = vlib_buffer_get_default_data_size (vm); u16 thread_index = vm->thread_index; /** Make sure we have some RX buffers. */ @@ -377,11 +378,9 @@ tuntap_rx (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) vlib_set_next_frame_buffer (vm, node, next_index, bi); - if (n_trace > 0) - { - vlib_trace_buffer (vm, node, next_index, b, /* follow_chain */ 1); - vlib_set_trace_count (vm, node, n_trace - 1); - } + if (PREDICT_FALSE (n_trace > 0 && vlib_trace_buffer (vm, node, next_index, b, /* follow_chain */ + 1))) + vlib_set_trace_count (vm, node, n_trace - 1); } return 1; @@ -397,6 +396,7 @@ static char *tuntap_rx_error_strings[] = { /* *INDENT-OFF* */ VLIB_REGISTER_NODE (tuntap_rx_node,static) = { .function = tuntap_rx, + .flags = VLIB_NODE_FLAG_TRACE_SUPPORTED, .name = "tuntap-rx", .sibling_of = "device-input", .type = VLIB_NODE_TYPE_INPUT, @@ -445,7 +445,7 @@ tuntap_exit (vlib_main_t * vm) if (sfd < 0) clib_unix_warning ("provisioning socket"); - memset (&ifr, 0, sizeof (ifr)); + clib_memset (&ifr, 0, sizeof (ifr)); strncpy (ifr.ifr_name, tm->tun_name, sizeof (ifr.ifr_name) - 1); /* get flags, modify to bring down interface... */ @@ -489,7 +489,7 @@ tuntap_config (vlib_main_t * vm, unformat_input_t * input) u8 *name; int flags = IFF_TUN | IFF_NO_PI; int is_enabled = 0, is_ether = 0, have_normal_interface = 0; - const uword buffer_size = VLIB_BUFFER_DATA_SIZE; + const uword buffer_size = vlib_buffer_get_default_data_size (vm); while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) { @@ -535,7 +535,7 @@ tuntap_config (vlib_main_t * vm, unformat_input_t * input) goto done; } - memset (&ifr, 0, sizeof (ifr)); + clib_memset (&ifr, 0, sizeof (ifr)); strncpy (ifr.ifr_name, tm->tun_name, sizeof (ifr.ifr_name) - 1); ifr.ifr_flags = flags; if (ioctl (tm->dev_net_tun_fd, TUNSETIFF, (void *) &ifr) < 0) @@ -563,7 +563,7 @@ tuntap_config (vlib_main_t * vm, unformat_input_t * input) struct ifreq ifr; struct sockaddr_ll sll; - memset (&ifr, 0, sizeof (ifr)); + clib_memset (&ifr, 0, sizeof (ifr)); strncpy (ifr.ifr_name, tm->tun_name, sizeof (ifr.ifr_name) - 1); if (ioctl (tm->dev_tap_fd, SIOCGIFINDEX, &ifr) < 0) { @@ -572,7 +572,7 @@ tuntap_config (vlib_main_t * vm, unformat_input_t * input) } /* Bind the provisioning socket to the interface. */ - memset (&sll, 0, sizeof (sll)); + clib_memset (&sll, 0, sizeof (sll)); sll.sll_family = AF_PACKET; sll.sll_ifindex = ifr.ifr_ifindex; sll.sll_protocol = htons (ETH_P_ALL); @@ -626,7 +626,7 @@ tuntap_config (vlib_main_t * vm, unformat_input_t * input) goto done; } else - clib_memcpy (tm->ether_dst_mac, ifr.ifr_hwaddr.sa_data, 6); + clib_memcpy_fast (tm->ether_dst_mac, ifr.ifr_hwaddr.sa_data, 6); } if (have_normal_interface) @@ -719,9 +719,9 @@ tuntap_ip4_add_del_interface_address (ip4_main_t * im, return; /** See if we already know about this subif */ - memset (&subif_addr, 0, sizeof (subif_addr)); + clib_memset (&subif_addr, 0, sizeof (subif_addr)); subif_addr.sw_if_index = sw_if_index; - clib_memcpy (&subif_addr.addr, address, sizeof (*address)); + clib_memcpy_fast (&subif_addr.addr, address, sizeof (*address)); p = mhash_get (&tm->subif_mhash, &subif_addr); @@ -735,7 +735,7 @@ tuntap_ip4_add_del_interface_address (ip4_main_t * im, } /* Use subif pool index to select alias device. */ - memset (&ifr, 0, sizeof (ifr)); + clib_memset (&ifr, 0, sizeof (ifr)); snprintf (ifr.ifr_name, sizeof (ifr.ifr_name), "%s:%d", tm->tun_name, (int) (ap - tm->subifs)); @@ -753,7 +753,7 @@ tuntap_ip4_add_del_interface_address (ip4_main_t * im, /* Set ipv4 address, netmask. */ sin->sin_family = AF_INET; - clib_memcpy (&sin->sin_addr.s_addr, address, 4); + clib_memcpy_fast (&sin->sin_addr.s_addr, address, 4); if (ioctl (tm->dev_tap_fd, SIOCSIFADDR, &ifr) < 0) clib_unix_warning ("ioctl SIOCSIFADDR"); @@ -835,10 +835,10 @@ tuntap_ip6_add_del_interface_address (ip6_main_t * im, return; /* See if we already know about this subif */ - memset (&subif_addr, 0, sizeof (subif_addr)); + clib_memset (&subif_addr, 0, sizeof (subif_addr)); subif_addr.sw_if_index = sw_if_index; subif_addr.is_v6 = 1; - clib_memcpy (&subif_addr.addr, address, sizeof (*address)); + clib_memcpy_fast (&subif_addr.addr, address, sizeof (*address)); p = mhash_get (&tm->subif_mhash, &subif_addr); @@ -852,8 +852,8 @@ tuntap_ip6_add_del_interface_address (ip6_main_t * im, } /* Use subif pool index to select alias device. */ - memset (&ifr, 0, sizeof (ifr)); - memset (&ifr6, 0, sizeof (ifr6)); + clib_memset (&ifr, 0, sizeof (ifr)); + clib_memset (&ifr6, 0, sizeof (ifr6)); snprintf (ifr.ifr_name, sizeof (ifr.ifr_name), "%s:%d", tm->tun_name, (int) (ap - tm->subifs)); @@ -874,7 +874,7 @@ tuntap_ip6_add_del_interface_address (ip6_main_t * im, ifr6.ifr6_ifindex = ifr.ifr_ifindex; ifr6.ifr6_prefixlen = address_length; - clib_memcpy (&ifr6.ifr6_addr, address, 16); + clib_memcpy_fast (&ifr6.ifr6_addr, address, 16); if (ioctl (sockfd, SIOCSIFADDR, &ifr6) < 0) clib_unix_warning ("set address"); @@ -893,7 +893,7 @@ tuntap_ip6_add_del_interface_address (ip6_main_t * im, ifr6.ifr6_ifindex = ifr.ifr_ifindex; ifr6.ifr6_prefixlen = address_length; - clib_memcpy (&ifr6.ifr6_addr, address, 16); + clib_memcpy_fast (&ifr6.ifr6_addr, address, 16); if (ioctl (sockfd, SIOCDIFADDR, &ifr6) < 0) clib_unix_warning ("del address"); @@ -934,7 +934,7 @@ static void tuntap_nopunt_frame (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { - u32 *buffers = vlib_frame_args (frame); + u32 *buffers = vlib_frame_vector_args (frame); uword n_packets = frame->n_vectors; vlib_buffer_free (vm, buffers, n_packets); vlib_frame_free (vm, node, frame); @@ -980,7 +980,7 @@ tuntap_intfc_tx (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { tuntap_main_t *tm = &tuntap_main; - u32 *buffers = vlib_frame_args (frame); + u32 *buffers = vlib_frame_vector_args (frame); uword n_buffers = frame->n_vectors; /* Normal interface transmit happens only on the normal interface... */ @@ -1010,7 +1010,6 @@ VNET_DEVICE_CLASS (tuntap_dev_class,static) = { static clib_error_t * tuntap_init (vlib_main_t * vm) { - clib_error_t *error; ip4_main_t *im4 = &ip4_main; ip6_main_t *im6 = &ip6_main; ip4_add_del_interface_address_callback_t cb4; @@ -1018,10 +1017,6 @@ tuntap_init (vlib_main_t * vm) tuntap_main_t *tm = &tuntap_main; vlib_thread_main_t *m = vlib_get_thread_main (); - error = vlib_call_init_function (vm, ip4_init); - if (error) - return error; - mhash_init (&tm->subif_mhash, sizeof (u32), sizeof (subif_address_t)); cb4.function = tuntap_ip4_add_del_interface_address; @@ -1037,7 +1032,12 @@ tuntap_init (vlib_main_t * vm) return 0; } -VLIB_INIT_FUNCTION (tuntap_init); +/* *INDENT-OFF* */ +VLIB_INIT_FUNCTION (tuntap_init) = +{ + .runs_after = VLIB_INITS("ip4_init"), +}; +/* *INDENT-ON* */ /* * fd.io coding-style-patch-verification: ON