| 3152 | } |
| 3153 | |
| 3154 | static int |
| 3155 | vxlan_clone_create(struct if_clone *ifc, int unit, caddr_t params) |
| 3156 | { |
| 3157 | struct vxlan_softc *sc; |
| 3158 | struct ifnet *ifp; |
| 3159 | struct ifvxlanparam vxlp; |
| 3160 | int error; |
| 3161 | |
| 3162 | sc = malloc(sizeof(struct vxlan_softc), M_VXLAN, M_WAITOK | M_ZERO); |
| 3163 | sc->vxl_unit = unit; |
| 3164 | vxlan_set_default_config(sc); |
| 3165 | error = vxlan_stats_alloc(sc); |
| 3166 | if (error != 0) |
| 3167 | goto fail; |
| 3168 | |
| 3169 | if (params != 0) { |
| 3170 | error = copyin(params, &vxlp, sizeof(vxlp)); |
| 3171 | if (error) |
| 3172 | goto fail; |
| 3173 | |
| 3174 | error = vxlan_set_user_config(sc, &vxlp); |
| 3175 | if (error) |
| 3176 | goto fail; |
| 3177 | } |
| 3178 | |
| 3179 | ifp = if_alloc(IFT_ETHER); |
| 3180 | if (ifp == NULL) { |
| 3181 | error = ENOSPC; |
| 3182 | goto fail; |
| 3183 | } |
| 3184 | |
| 3185 | sc->vxl_ifp = ifp; |
| 3186 | rm_init(&sc->vxl_lock, "vxlanrm"); |
| 3187 | callout_init_rw(&sc->vxl_callout, &sc->vxl_lock, 0); |
| 3188 | sc->vxl_port_hash_key = arc4random(); |
| 3189 | vxlan_ftable_init(sc); |
| 3190 | |
| 3191 | vxlan_sysctl_setup(sc); |
| 3192 | |
| 3193 | ifp->if_softc = sc; |
| 3194 | if_initname(ifp, vxlan_name, unit); |
| 3195 | ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; |
| 3196 | ifp->if_init = vxlan_init; |
| 3197 | ifp->if_ioctl = vxlan_ioctl; |
| 3198 | ifp->if_transmit = vxlan_transmit; |
| 3199 | ifp->if_qflush = vxlan_qflush; |
| 3200 | ifp->if_capabilities = VXLAN_BASIC_IFCAPS; |
| 3201 | ifp->if_capenable = VXLAN_BASIC_IFCAPS; |
| 3202 | sc->vxl_reqcap = -1; |
| 3203 | vxlan_set_hwcaps(sc); |
| 3204 | |
| 3205 | ifmedia_init(&sc->vxl_media, 0, vxlan_media_change, vxlan_media_status); |
| 3206 | ifmedia_add(&sc->vxl_media, IFM_ETHER | IFM_AUTO, 0, NULL); |
| 3207 | ifmedia_set(&sc->vxl_media, IFM_ETHER | IFM_AUTO); |
| 3208 | |
| 3209 | ether_gen_addr(ifp, &sc->vxl_hwaddr); |
| 3210 | ether_ifattach(ifp, sc->vxl_hwaddr.octet); |
| 3211 |
nothing calls this directly
no test coverage detected