| 892 | } |
| 893 | |
| 894 | static void |
| 895 | vxlan_socket_destroy(struct vxlan_socket *vso) |
| 896 | { |
| 897 | struct socket *so; |
| 898 | #ifdef INVARIANTS |
| 899 | int i; |
| 900 | struct vxlan_socket_mc_info *mc; |
| 901 | |
| 902 | for (i = 0; i < VXLAN_SO_MC_MAX_GROUPS; i++) { |
| 903 | mc = &vso->vxlso_mc[i]; |
| 904 | KASSERT(mc->vxlsomc_gaddr.sa.sa_family == AF_UNSPEC, |
| 905 | ("%s: socket %p mc[%d] still has address", |
| 906 | __func__, vso, i)); |
| 907 | } |
| 908 | |
| 909 | for (i = 0; i < VXLAN_SO_VNI_HASH_SIZE; i++) { |
| 910 | KASSERT(LIST_EMPTY(&vso->vxlso_vni_hash[i]), |
| 911 | ("%s: socket %p vni_hash[%d] not empty", |
| 912 | __func__, vso, i)); |
| 913 | } |
| 914 | #endif |
| 915 | so = vso->vxlso_sock; |
| 916 | if (so != NULL) { |
| 917 | vso->vxlso_sock = NULL; |
| 918 | soclose(so); |
| 919 | } |
| 920 | |
| 921 | rm_destroy(&vso->vxlso_lock); |
| 922 | free(vso, M_VXLAN); |
| 923 | } |
| 924 | |
| 925 | static void |
| 926 | vxlan_socket_release(struct vxlan_socket *vso) |
no test coverage detected