• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-12-stable/contrib/ofed/libibverbs/

Lines Matching defs:neigh_handler

121 static struct nl_addr *get_neigh_mac(struct get_neigh_handler *neigh_handler)
129 neigh = rtnl_neigh_get(neigh_handler->neigh_cache,
130 neigh_handler->oif,
131 neigh_handler->dst);
145 struct get_neigh_handler *neigh_handler =
150 (struct nl_object *)neigh_handler->filter_neigh)) {
153 if (neigh_handler->found_ll_addr == NULL) {
157 neigh_handler->found_ll_addr =
165 struct get_neigh_handler *neigh_handler =
168 if (nl_msg_parse(msg, &get_neigh_cb_event, neigh_handler) < 0)
174 static void set_neigh_filter(struct get_neigh_handler *neigh_handler,
176 neigh_handler->filter_neigh = filter;
197 static int create_socket(struct get_neigh_handler *neigh_handler,
208 err = nl_addr_fill_sockaddr(neigh_handler->src,
217 err = nl_addr_fill_sockaddr(neigh_handler->dst,
226 neigh_handler->oif);
250 static int create_timer(struct get_neigh_handler *neigh_handler)
252 int user_timeout = neigh_handler->timeout/NUM_OF_TRIES;
264 if (neigh_handler->timeout) {
298 struct get_neigh_handler *neigh_handler)
301 struct nl_addr *ll_addr = get_neigh_mac(neigh_handler);
316 err = nl_socket_add_membership(neigh_handler->sock,
321 neigh_filter = create_filter_neigh_for_dst(neigh_handler->dst,
322 neigh_handler->oif);
326 set_neigh_filter(neigh_handler, neigh_filter);
328 nl_socket_disable_seq_check(neigh_handler->sock);
329 nl_socket_modify_cb(neigh_handler->sock, NL_CB_VALID, NL_CB_CUSTOM,
330 &get_neigh_cb, neigh_handler);
332 fd = nl_socket_get_fd(neigh_handler->sock);
334 err = create_socket(neigh_handler, &addr_dst, &sock_fd);
343 timer_fd = create_timer(neigh_handler);
360 nl_recvmsgs_default(neigh_handler->sock);
361 if (neigh_handler->found_ll_addr)
364 nl_cache_refill(neigh_handler->sock,
365 neigh_handler->neigh_cache);
366 ll_addr = get_neigh_mac(neigh_handler);
395 return ll_addr ? ll_addr : neigh_handler->found_ll_addr;
513 struct get_neigh_handler *neigh_handler =
530 nl_addr_put(neigh_handler->dst);
531 neigh_handler->dst = nl_addr_clone(gateway);
542 if (!neigh_handler->src && src)
543 neigh_handler->src = nl_addr_clone(src);
545 if (neigh_handler->oif < 0 && oif > 0)
546 neigh_handler->oif = oif;
552 link = rtnl_link_get(neigh_handler->link_cache,
553 neigh_handler->oif);
563 neigh_handler->found_ll_addr = nl_addr_clone(lladdr);
567 neigh_handler->dst,
568 &neigh_handler->found_ll_addr);
576 if (neigh_handler->src) {
577 nl_addr_put(neigh_handler->src);
578 neigh_handler->src = NULL;
584 struct get_neigh_handler *neigh_handler =
588 err = nl_msg_parse(msg, &get_route_cb_parser, neigh_handler);
594 if (!neigh_handler->dst || !neigh_handler->src ||
595 neigh_handler->oif <= 0) {
600 if (NULL != neigh_handler->found_ll_addr)
603 neigh_handler->found_ll_addr =
604 process_get_neigh_mac(neigh_handler);
607 return neigh_handler->found_ll_addr ? 0 : -1;
610 int neigh_get_oif_from_src(struct get_neigh_handler *neigh_handler)
616 err = nl_addr_info(neigh_handler->src, &src_info);
637 int neigh_init_resources(struct get_neigh_handler *neigh_handler, int timeout)
642 neigh_handler->sock = nl_socket_alloc();
643 if (neigh_handler->sock == NULL) {
648 err = nl_connect(neigh_handler->sock, NETLINK_ROUTE);
652 err = rtnl_link_alloc_cache(neigh_handler->sock, AF_UNSPEC,
653 &neigh_handler->link_cache);
660 nl_cache_mngt_provide(neigh_handler->link_cache);
662 err = rtnl_route_alloc_cache(neigh_handler->sock, AF_UNSPEC, 0,
663 &neigh_handler->route_cache);
670 nl_cache_mngt_provide(neigh_handler->route_cache);
672 err = rtnl_neigh_alloc_cache(neigh_handler->sock,
673 &neigh_handler->neigh_cache);
679 nl_cache_mngt_provide(neigh_handler->neigh_cache);
682 neigh_handler->timeout = timeout;
683 neigh_handler->oif = -1;
684 neigh_handler->filter_neigh = NULL;
685 neigh_handler->found_ll_addr = NULL;
686 neigh_handler->dst = NULL;
687 neigh_handler->src = NULL;
688 neigh_handler->vid = -1;
693 nl_cache_mngt_unprovide(neigh_handler->route_cache);
694 nl_cache_free(neigh_handler->route_cache);
695 neigh_handler->route_cache = NULL;
697 nl_cache_mngt_unprovide(neigh_handler->link_cache);
698 nl_cache_free(neigh_handler->link_cache);
699 neigh_handler->link_cache = NULL;
701 nl_close(neigh_handler->sock);
703 nl_socket_free(neigh_handler->sock);
704 neigh_handler->sock = NULL;
708 uint16_t neigh_get_vlan_id_from_dev(struct get_neigh_handler *neigh_handler)
713 link = rtnl_link_get(neigh_handler->link_cache, neigh_handler->oif);
725 void neigh_set_vlan_id(struct get_neigh_handler *neigh_handler, uint16_t vid)
728 neigh_handler->vid = vid;
731 int neigh_set_dst(struct get_neigh_handler *neigh_handler,
734 neigh_handler->dst = nl_addr_build(family, buf, size);
735 return neigh_handler->dst == NULL;
738 int neigh_set_src(struct get_neigh_handler *neigh_handler,
741 neigh_handler->src = nl_addr_build(family, buf, size);
742 return neigh_handler->src == NULL;
745 void neigh_set_oif(struct get_neigh_handler *neigh_handler, int oif)
747 neigh_handler->oif = oif;
750 int neigh_get_ll(struct get_neigh_handler *neigh_handler, void *addr_buff,
754 if (neigh_handler->found_ll_addr == NULL)
757 neigh_len = nl_addr_get_len(neigh_handler->found_ll_addr);
762 memcpy(addr_buff, nl_addr_get_binary_addr(neigh_handler->found_ll_addr),
768 void neigh_free_resources(struct get_neigh_handler *neigh_handler)
771 if (neigh_handler->filter_neigh != NULL) {
772 rtnl_neigh_put(neigh_handler->filter_neigh);
773 neigh_handler->filter_neigh = NULL;
776 if (neigh_handler->src != NULL) {
777 nl_addr_put(neigh_handler->src);
778 neigh_handler->src = NULL;
781 if (neigh_handler->dst != NULL) {
782 nl_addr_put(neigh_handler->dst);
783 neigh_handler->dst = NULL;
786 if (neigh_handler->found_ll_addr != NULL) {
787 nl_addr_put(neigh_handler->found_ll_addr);
788 neigh_handler->found_ll_addr = NULL;
791 if (neigh_handler->neigh_cache != NULL) {
792 nl_cache_mngt_unprovide(neigh_handler->neigh_cache);
793 nl_cache_free(neigh_handler->neigh_cache);
794 neigh_handler->neigh_cache = NULL;
797 if (neigh_handler->route_cache != NULL) {
798 nl_cache_mngt_unprovide(neigh_handler->route_cache);
799 nl_cache_free(neigh_handler->route_cache);
800 neigh_handler->route_cache = NULL;
803 if (neigh_handler->link_cache != NULL) {
804 nl_cache_mngt_unprovide(neigh_handler->link_cache);
805 nl_cache_free(neigh_handler->link_cache);
806 neigh_handler->link_cache = NULL;
809 if (neigh_handler->sock != NULL) {
810 nl_close(neigh_handler->sock);
811 nl_socket_free(neigh_handler->sock);
812 neigh_handler->sock = NULL;
816 int process_get_neigh(struct get_neigh_handler *neigh_handler)
820 .rtm_family = nl_addr_get_family(neigh_handler->dst),
821 .rtm_dst_len = nl_addr_get_prefixlen(neigh_handler->dst),
832 nla_put_addr(m, RTA_DST, neigh_handler->dst);
834 if (neigh_handler->oif > 0)
835 nla_put_u32(m, RTA_OIF, neigh_handler->oif);
837 err = nl_send_auto_complete(neigh_handler->sock, m);
842 nl_socket_modify_cb(neigh_handler->sock, NL_CB_VALID,
843 NL_CB_CUSTOM, &get_route_cb, neigh_handler);
845 err = nl_recvmsgs_default(neigh_handler->sock);