MCPcopy Create free account
hub / github.com/F-Stack/f-stack / me_set_tunnel

Function me_set_tunnel

freebsd/net/if_me.c:403–435  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

401}
402
403static int
404me_set_tunnel(struct me_softc *sc, in_addr_t src, in_addr_t dst)
405{
406 struct me_softc *tmp;
407
408 sx_assert(&me_ioctl_sx, SA_XLOCKED);
409
410 if (V_me_hashtbl == NULL) {
411 V_me_hashtbl = me_hashinit();
412 V_me_srchashtbl = me_hashinit();
413 }
414
415 if (sc->me_src.s_addr == src && sc->me_dst.s_addr == dst)
416 return (0);
417
418 CK_LIST_FOREACH(tmp, &ME_HASH(src, dst), chain) {
419 if (tmp == sc)
420 continue;
421 if (tmp->me_src.s_addr == src &&
422 tmp->me_dst.s_addr == dst)
423 return (EADDRNOTAVAIL);
424 }
425
426 me_delete_tunnel(sc);
427 sc->me_dst.s_addr = dst;
428 sc->me_src.s_addr = src;
429 CK_LIST_INSERT_HEAD(&ME_HASH(src, dst), sc, chain);
430 CK_LIST_INSERT_HEAD(&ME_SRCHASH(src), sc, srchash);
431
432 me_set_running(sc);
433 if_link_state_change(ME2IFP(sc), LINK_STATE_UP);
434 return (0);
435}
436
437static void
438me_delete_tunnel(struct me_softc *sc)

Callers 1

me_ioctlFunction · 0.85

Calls 4

me_hashinitFunction · 0.85
me_delete_tunnelFunction · 0.85
me_set_runningFunction · 0.85
if_link_state_changeFunction · 0.85

Tested by

no test coverage detected