freebsd-dev/sys/net
Alexander V. Chernikov a77facd273 ifnet: consistently call hooks when the interface gets up.
Some context on the current IPv6 interface setup & address management:

There are two data path for IPv6 initialisation in context of assigning
 LL addresses:
1) Userland explicitly requests IFF_UP for the interface w/o any addresses.
if_up() then calls in6_if_up(), which calls in6_ifattach().
The latter sets up some initial ND/IN6 state and disables IPv6 for the
interface if it’s not loopback. If the interface is loopback, then it
adds ::1/128 and LL addresses via in6_ifattach_loopback().
Then, devd notification is generated (if the VNET is the default one),
which triggers rc.network ifconfig_up(), causing ifdisabled to be removed
via SIOCSIFINFO_IN6 from ifconfig. The kernel SIOCSIFINFO_IN6 handler
calls in6_if_up() once again and it assigns the interface link-local address.

2) Userland adds IPv4 or IPv6 address to the interface. SIOCAIFADDR[_IN6]
kernel handler calls IPv4/IPv6 protocol handler to add the address.
Both then call if_ioctl() with SIOCSIFADDR. Ethernet/loopback ioctl handlers
silently sets IFF_UP for the interface. Finally, if.c:ifioctl() wrapper code
compares old and new interface flags and, if IFF_UP is added, it explicitly
calls in6_if_up(), which adds link-local address if either the original
address is IPv6 or the interface is loopback.

In the latter case, “formal” interface-up notifications are missing.
The kernel does not trigger event handler event, does not call carp hook
and does not provide any userland notification.

This diff unifies the event handling in both scenarios, providing the
necessary notifications to the kernel and userland.

Reviewed By: kp
Differential Revision: https://reviews.freebsd.org/D40332
MFC after:	2 weeks
2023-06-01 11:44:19 +00:00
..
altq altq: ansify 2023-02-13 18:32:45 +00:00
route routing: fix panic triggered by the 'gr_idx != 0' assert in nhg code 2023-05-17 08:40:29 +00:00
bpf_buffer.c
bpf_buffer.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
bpf_filter.c
bpf_jitter.c
bpf_jitter.h
bpf_zerocopy.c spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
bpf_zerocopy.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
bpf.c net: whack __mips__ leftovers 2023-03-01 11:07:32 +00:00
bpf.h bpf: Add "_if" tap APIs 2023-01-31 15:02:14 -05:00
bpfdesc.h
bridgestp.c spdx: The BSD-2-Clause-NetBSD identifier is obsolete, drop -NetBSD 2023-05-12 10:44:04 -06:00
bridgestp.h
debugnet_inet.c spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
debugnet_int.h netgdb: Fix netgdb double ack, print proxy address 2023-05-27 09:34:17 -07:00
debugnet.c netgdb: Fix netgdb double ack, print proxy address 2023-05-27 09:34:17 -07:00
debugnet.h netgdb: Fix netgdb double ack, print proxy address 2023-05-27 09:34:17 -07:00
dlt.h libpcap: Update to 1.10.3 2023-03-31 16:02:22 -03:00
ethernet.h bridge: Add support for emulated netmap mode 2023-04-10 12:14:11 -04:00
firewire.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
ieee8023ad_lacp.c spdx: The BSD-2-Clause-NetBSD identifier is obsolete, drop -NetBSD 2023-05-12 10:44:04 -06:00
ieee8023ad_lacp.h spdx: The BSD-2-Clause-NetBSD identifier is obsolete, drop -NetBSD 2023-05-12 10:44:04 -06:00
ieee_oui.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
if_arp.h
if_bridge.c bridge: fix lookup for untagged packets in bridge_transmit() 2023-06-01 11:31:59 +02:00
if_bridgevar.h bridge: Add support for emulated netmap mode 2023-04-10 12:14:11 -04:00
if_clone.c netlink: add netlink interfaces to if_clone 2023-04-25 12:34:46 +00:00
if_clone.h netlink: add netlink interfaces to if_clone 2023-04-25 12:34:46 +00:00
if_dead.c spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
if_disc.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_dl.h
if_edsc.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_enc.c spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
if_enc.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
if_epair.c spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
if_ethersubr.c net: replace IFF_KNOWSEPOCH with IFF_NEEDSEPOCH 2023-04-17 09:08:35 -07:00
if_fwsubr.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_gif.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_gif.h
if_gre.c spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
if_gre.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
if_infiniband.c net: replace IFF_KNOWSEPOCH with IFF_NEEDSEPOCH 2023-04-17 09:08:35 -07:00
if_ipsec.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_ipsec.h
if_lagg.c lagg(4): Correctly define some sysctl variables 2023-04-17 18:24:35 +08:00
if_lagg.h lagg: Various style fixes 2023-03-24 17:55:15 +08:00
if_llatbl.c spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
if_llatbl.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
if_llc.h
if_loop.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_me.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_media.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_media.h
if_mib.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_mib.h
if_ovpn.c if_ovpn: atomic_set -> atomic_store 2023-05-24 18:29:21 +02:00
if_ovpn.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
if_pflog.h
if_pfsync.h pf: make contents of struct pfsync_state configurable 2023-05-30 14:28:56 +02:00
if_private.h IfAPI: Hide the macros that touch ifnet members 2023-04-24 09:54:23 -04:00
if_stf.c if_stf: Delete unreachable code 2023-04-23 12:47:57 +08:00
if_stf.h
if_tap.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
if_tun.h
if_tuntap.c tap(4): allow full-duplex and non-zero speed 2023-05-31 09:53:48 -06:00
if_types.h Import the WireGuard driver from zx2c4.com. 2022-10-28 13:36:12 -07:00
if_var.h net/if_var.h: consistently use if_t over struct ifnet * 2023-05-17 06:31:07 +03:00
if_vlan_var.h bridge: distinguish no vlan and vlan 1 2023-04-14 13:17:02 +02:00
if_vlan.c vlan: fix setting flags on a QinQ interface 2023-05-12 11:12:51 +02:00
if_vxlan.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
if_vxlan.h
if.c ifnet: consistently call hooks when the interface gets up. 2023-06-01 11:44:19 +00:00
if.h net/if.h: fix style of if_t definition 2023-05-17 06:30:59 +03:00
ifdi_if.m IfAPI: Explicitly include <net/if_private.h> in netstack 2023-01-31 15:02:16 -05:00
iflib_clone.c ifnet/API: Move struct ifnet definition to a <net/if_private.h> 2023-01-24 14:36:30 -05:00
iflib_private.h
iflib.c net: replace IFF_KNOWSEPOCH with IFF_NEEDSEPOCH 2023-04-17 09:08:35 -07:00
iflib.h
ifq.c IfAPI: Explicitly include <net/if_private.h> in netstack 2023-01-31 15:02:16 -05:00
ifq.h ifnet/API: Privatize the implementation of the drbr_* APIs 2023-01-31 15:02:14 -05:00
infiniband.h infiniband: Convert BPF handling for IfAPI 2023-03-14 15:51:32 -04:00
mp_ring.c
mp_ring.h net: whack __mips__ leftovers 2023-03-01 11:07:32 +00:00
mppc.h
mppcc.c
mppcd.c
netisr_internal.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
netisr.c spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
netisr.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
netmap_legacy.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
netmap_user.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
netmap_virt.h
netmap.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
paravirt.h
pfil.c pf: distinguish forwarding and output cases for pf_refragment6() 2023-03-16 10:59:04 +01:00
pfil.h pf: distinguish forwarding and output cases for pf_refragment6() 2023-03-16 10:59:04 +01:00
pfkeyv2.h net/pfkeyv2.h: fix typo, meNber 2023-05-11 02:52:39 +03:00
pfvar.h pfctl: Add missing state parameters in DIOCGETSTATESV2 2023-05-30 14:28:57 +02:00
ppp_defs.h
radix.c
radix.h
rndis.h
route.c netlink: add netlink KPI to the kernel by default 2023-03-27 13:55:44 +00:00
route.h netlink: add rtsock-compatible header to use with netlink snl(3). 2023-03-09 14:37:42 +00:00
rss_config.c
rss_config.h
rtsock.c routing: add public rt_is_exportable() version to check if 2023-03-26 08:24:27 +00:00
sff8436.h
sff8472.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
slcompress.c
slcompress.h
toeplitz.c
toeplitz.h
vnet.c spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00
vnet.h spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD 2023-05-12 10:44:03 -06:00