mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-24 21:34:08 +03:00
networkd: rework headers to avoid circular includes
Header files were organized in a way where the includer would add various typedefs used by the includee before including it, resulting in a tangled web of dependencies between files. Replace this with the following logic: networkd.h / \ networkd-link.h \ networkd-ipv4ll.h--\__\ networkd-fdb.h \ networkd-network.h netword-netdev-*.h networkd-route.h \ networkd-netdev.h If a pointer to a structure defined in a different header file is needed, use a typedef line instead of including the whole header.
This commit is contained in:
parent
26ccc1d087
commit
634f0f983c
@ -22,7 +22,9 @@
|
||||
typedef struct AddressPool AddressPool;
|
||||
|
||||
#include "in-addr-util.h"
|
||||
#include "networkd.h"
|
||||
#include "list.h"
|
||||
|
||||
typedef struct Manager Manager;
|
||||
|
||||
struct AddressPool {
|
||||
Manager *manager;
|
||||
|
@ -28,10 +28,12 @@ typedef struct Address Address;
|
||||
|
||||
#include "networkd-link.h"
|
||||
#include "networkd-network.h"
|
||||
#include "networkd.h"
|
||||
|
||||
#define CACHE_INFO_INFINITY_LIFE_TIME 0xFFFFFFFFU
|
||||
|
||||
typedef struct Network Network;
|
||||
typedef struct Link Link;
|
||||
|
||||
struct Address {
|
||||
Network *network;
|
||||
unsigned section;
|
||||
|
@ -24,7 +24,7 @@
|
||||
#include "dhcp-lease-internal.h"
|
||||
#include "hostname-util.h"
|
||||
#include "network-internal.h"
|
||||
#include "networkd-link.h"
|
||||
#include "networkd.h"
|
||||
|
||||
static int dhcp4_route_handler(sd_netlink *rtnl, sd_netlink_message *m,
|
||||
void *userdata) {
|
||||
|
@ -23,7 +23,7 @@
|
||||
#include "sd-dhcp6-client.h"
|
||||
|
||||
#include "network-internal.h"
|
||||
#include "networkd-link.h"
|
||||
#include "networkd.h"
|
||||
|
||||
static int dhcp6_lease_address_acquired(sd_dhcp6_client *client, Link *link);
|
||||
|
||||
|
@ -19,10 +19,12 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
typedef struct FdbEntry FdbEntry;
|
||||
#include "list.h"
|
||||
#include "macro.h"
|
||||
|
||||
#include "networkd-network.h"
|
||||
#include "networkd.h"
|
||||
typedef struct Network Network;
|
||||
typedef struct FdbEntry FdbEntry;
|
||||
typedef struct Link Link;
|
||||
|
||||
struct FdbEntry {
|
||||
Network *network;
|
||||
|
@ -21,7 +21,7 @@
|
||||
#include <linux/if.h>
|
||||
|
||||
#include "network-internal.h"
|
||||
#include "networkd-link.h"
|
||||
#include "networkd.h"
|
||||
|
||||
static int ipv4ll_address_lost(Link *link) {
|
||||
_cleanup_address_free_ Address *address = NULL;
|
||||
|
@ -28,9 +28,8 @@
|
||||
#include "fileio.h"
|
||||
#include "netlink-util.h"
|
||||
#include "network-internal.h"
|
||||
#include "networkd-link.h"
|
||||
#include "networkd.h"
|
||||
#include "networkd-lldp-tx.h"
|
||||
#include "networkd-netdev.h"
|
||||
#include "set.h"
|
||||
#include "socket-util.h"
|
||||
#include "stdio-util.h"
|
||||
|
@ -21,14 +21,17 @@
|
||||
|
||||
#include <endian.h>
|
||||
|
||||
#include "sd-bus.h"
|
||||
#include "sd-dhcp-client.h"
|
||||
#include "sd-dhcp-server.h"
|
||||
#include "sd-dhcp6-client.h"
|
||||
#include "sd-ipv4ll.h"
|
||||
#include "sd-lldp.h"
|
||||
#include "sd-ndisc.h"
|
||||
#include "sd-netlink.h"
|
||||
|
||||
typedef struct Link Link;
|
||||
#include "list.h"
|
||||
#include "set.h"
|
||||
|
||||
typedef enum LinkState {
|
||||
LINK_STATE_PENDING,
|
||||
@ -54,11 +57,11 @@ typedef enum LinkOperationalState {
|
||||
_LINK_OPERSTATE_INVALID = -1
|
||||
} LinkOperationalState;
|
||||
|
||||
#include "networkd-address.h"
|
||||
#include "networkd-network.h"
|
||||
#include "networkd.h"
|
||||
typedef struct Manager Manager;
|
||||
typedef struct Network Network;
|
||||
typedef struct Address Address;
|
||||
|
||||
struct Link {
|
||||
typedef struct Link {
|
||||
Manager *manager;
|
||||
|
||||
int n_ref;
|
||||
@ -122,7 +125,7 @@ struct Link {
|
||||
|
||||
Hashmap *bound_by_links;
|
||||
Hashmap *bound_to_links;
|
||||
};
|
||||
} Link;
|
||||
|
||||
Link *link_unref(Link *link);
|
||||
Link *link_ref(Link *link);
|
||||
|
@ -21,15 +21,18 @@
|
||||
#include <inttypes.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "fd-util.h"
|
||||
#include "fileio.h"
|
||||
#include "hostname-util.h"
|
||||
#include "networkd-lldp-tx.h"
|
||||
#include "random-util.h"
|
||||
#include "socket-util.h"
|
||||
#include "string-util.h"
|
||||
#include "unaligned.h"
|
||||
|
||||
#include "networkd.h"
|
||||
#include "networkd-lldp-tx.h"
|
||||
|
||||
#define LLDP_MULTICAST_ADDR { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x0e }
|
||||
|
||||
/* The LLDP spec calls this "txFastInit", see 9.2.5.19 */
|
||||
|
@ -24,7 +24,7 @@
|
||||
|
||||
#include "sd-ndisc.h"
|
||||
|
||||
#include "networkd-link.h"
|
||||
#include "networkd.h"
|
||||
|
||||
static int ndisc_netlink_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) {
|
||||
_cleanup_link_unref_ Link *link = userdata;
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "conf-parser.h"
|
||||
#include "extract-word.h"
|
||||
#include "missing.h"
|
||||
#include "networkd-netdev-bond.h"
|
||||
#include "string-table.h"
|
||||
|
@ -20,8 +20,7 @@
|
||||
***/
|
||||
|
||||
#include "in-addr-util.h"
|
||||
|
||||
typedef struct Bond Bond;
|
||||
#include "list.h"
|
||||
|
||||
#include "networkd-netdev.h"
|
||||
|
||||
@ -106,7 +105,7 @@ typedef struct ArpIpTarget {
|
||||
LIST_FIELDS(struct ArpIpTarget, arp_ip_target);
|
||||
} ArpIpTarget;
|
||||
|
||||
struct Bond {
|
||||
typedef struct Bond {
|
||||
NetDev meta;
|
||||
|
||||
BondMode mode;
|
||||
@ -133,8 +132,9 @@ struct Bond {
|
||||
|
||||
int n_arp_ip_targets;
|
||||
ArpIpTarget *arp_ip_targets;
|
||||
};
|
||||
} Bond;
|
||||
|
||||
DEFINE_NETDEV_CAST(BOND, Bond);
|
||||
extern const NetDevVTable bond_vtable;
|
||||
|
||||
const char *bond_mode_to_string(BondMode d) _const_;
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include "missing.h"
|
||||
#include "netlink-util.h"
|
||||
#include "networkd.h"
|
||||
#include "networkd-netdev-bridge.h"
|
||||
|
||||
/* callback for brige netdev's parameter set */
|
||||
|
@ -19,11 +19,9 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
typedef struct Bridge Bridge;
|
||||
|
||||
#include "networkd-netdev.h"
|
||||
|
||||
struct Bridge {
|
||||
typedef struct Bridge {
|
||||
NetDev meta;
|
||||
|
||||
int mcast_querier;
|
||||
@ -31,6 +29,7 @@ struct Bridge {
|
||||
usec_t forward_delay;
|
||||
usec_t hello_time;
|
||||
usec_t max_age;
|
||||
};
|
||||
} Bridge;
|
||||
|
||||
DEFINE_NETDEV_CAST(BRIDGE, Bridge);
|
||||
extern const NetDevVTable bridge_vtable;
|
||||
|
@ -19,12 +19,11 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
typedef struct Dummy Dummy;
|
||||
|
||||
#include "networkd-netdev.h"
|
||||
|
||||
struct Dummy {
|
||||
typedef struct Dummy {
|
||||
NetDev meta;
|
||||
};
|
||||
} Dummy;
|
||||
|
||||
DEFINE_NETDEV_CAST(DUMMY, Dummy);
|
||||
extern const NetDevVTable dummy_vtable;
|
||||
|
@ -1,11 +1,17 @@
|
||||
%{
|
||||
#include <stddef.h>
|
||||
#include "conf-parser.h"
|
||||
#include "networkd-netdev.h"
|
||||
#include "networkd-netdev-tunnel.h"
|
||||
#include "networkd-netdev-bond.h"
|
||||
#include "networkd-netdev-macvlan.h"
|
||||
#include "network-internal.h"
|
||||
#include "networkd-netdev-bond.h"
|
||||
#include "networkd-netdev-ipvlan.h"
|
||||
#include "networkd-netdev-macvlan.h"
|
||||
#include "networkd-netdev-tunnel.h"
|
||||
#include "networkd-netdev-tuntap.h"
|
||||
#include "networkd-netdev-veth.h"
|
||||
#include "networkd-netdev-vlan.h"
|
||||
#include "networkd-netdev-vxlan.h"
|
||||
#include "networkd-netdev-bridge.h"
|
||||
#include "networkd-netdev.h"
|
||||
%}
|
||||
struct ConfigPerfItem;
|
||||
%null_strings
|
||||
|
@ -19,8 +19,6 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
typedef struct IPVlan IPVlan;
|
||||
|
||||
#include "missing.h"
|
||||
#include "networkd-netdev.h"
|
||||
|
||||
@ -31,12 +29,13 @@ typedef enum IPVlanMode {
|
||||
_NETDEV_IPVLAN_MODE_INVALID = -1
|
||||
} IPVlanMode;
|
||||
|
||||
struct IPVlan {
|
||||
typedef struct IPVlan {
|
||||
NetDev meta;
|
||||
|
||||
IPVlanMode mode;
|
||||
};
|
||||
} IPVlan;
|
||||
|
||||
DEFINE_NETDEV_CAST(IPVLAN, IPVlan);
|
||||
extern const NetDevVTable ipvlan_vtable;
|
||||
|
||||
const char *ipvlan_mode_to_string(IPVlanMode d) _const_;
|
||||
|
@ -38,6 +38,8 @@ struct MacVlan {
|
||||
MacVlanMode mode;
|
||||
};
|
||||
|
||||
DEFINE_NETDEV_CAST(MACVLAN, MacVlan);
|
||||
DEFINE_NETDEV_CAST(MACVTAP, MacVlan);
|
||||
extern const NetDevVTable macvlan_vtable;
|
||||
extern const NetDevVTable macvtap_vtable;
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
typedef struct Tunnel Tunnel;
|
||||
#include "in-addr-util.h"
|
||||
|
||||
#include "networkd-netdev.h"
|
||||
|
||||
@ -37,7 +37,7 @@ typedef enum IPv6FlowLabel {
|
||||
_NETDEV_IPV6_FLOWLABEL_INVALID = -1,
|
||||
} IPv6FlowLabel;
|
||||
|
||||
struct Tunnel {
|
||||
typedef struct Tunnel {
|
||||
NetDev meta;
|
||||
|
||||
uint8_t encap_limit;
|
||||
@ -56,8 +56,17 @@ struct Tunnel {
|
||||
|
||||
bool pmtudisc;
|
||||
bool copy_dscp;
|
||||
};
|
||||
} Tunnel;
|
||||
|
||||
DEFINE_NETDEV_CAST(IPIP, Tunnel);
|
||||
DEFINE_NETDEV_CAST(GRE, Tunnel);
|
||||
DEFINE_NETDEV_CAST(GRETAP, Tunnel);
|
||||
DEFINE_NETDEV_CAST(IP6GRE, Tunnel);
|
||||
DEFINE_NETDEV_CAST(IP6GRETAP, Tunnel);
|
||||
DEFINE_NETDEV_CAST(SIT, Tunnel);
|
||||
DEFINE_NETDEV_CAST(VTI, Tunnel);
|
||||
DEFINE_NETDEV_CAST(VTI6, Tunnel);
|
||||
DEFINE_NETDEV_CAST(IP6TNL, Tunnel);
|
||||
extern const NetDevVTable ipip_vtable;
|
||||
extern const NetDevVTable sit_vtable;
|
||||
extern const NetDevVTable vti_vtable;
|
||||
|
@ -17,10 +17,13 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include <net/if.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <fcntl.h>
|
||||
#include <linux/if_tun.h>
|
||||
#include <net/if.h>
|
||||
#include <netinet/if_ether.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "fd-util.h"
|
||||
|
@ -34,5 +34,7 @@ struct TunTap {
|
||||
bool vnet_hdr;
|
||||
};
|
||||
|
||||
DEFINE_NETDEV_CAST(TUN, TunTap);
|
||||
DEFINE_NETDEV_CAST(TAP, TunTap);
|
||||
extern const NetDevVTable tun_vtable;
|
||||
extern const NetDevVTable tap_vtable;
|
||||
|
@ -30,4 +30,5 @@ struct Veth {
|
||||
struct ether_addr *mac_peer;
|
||||
};
|
||||
|
||||
DEFINE_NETDEV_CAST(VETH, Veth);
|
||||
extern const NetDevVTable veth_vtable;
|
||||
|
@ -31,4 +31,5 @@ struct VLan {
|
||||
uint64_t id;
|
||||
};
|
||||
|
||||
DEFINE_NETDEV_CAST(VLAN, VLan);
|
||||
extern const NetDevVTable vlan_vtable;
|
||||
|
@ -23,8 +23,10 @@
|
||||
|
||||
#include "conf-parser.h"
|
||||
#include "alloc-util.h"
|
||||
#include "extract-word.h"
|
||||
#include "parse-util.h"
|
||||
#include "missing.h"
|
||||
|
||||
#include "networkd-link.h"
|
||||
#include "networkd-netdev-vxlan.h"
|
||||
|
||||
|
@ -55,6 +55,7 @@ struct VxLan {
|
||||
struct ifla_vxlan_port_range port_range;
|
||||
};
|
||||
|
||||
DEFINE_NETDEV_CAST(VXLAN, VxLan);
|
||||
extern const NetDevVTable vxlan_vtable;
|
||||
|
||||
int config_parse_vxlan_group_address(const char *unit,
|
||||
|
@ -19,15 +19,13 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include "sd-netlink.h"
|
||||
|
||||
#include "list.h"
|
||||
|
||||
typedef struct NetDev NetDev;
|
||||
typedef struct NetDevVTable NetDevVTable;
|
||||
|
||||
#include "networkd-link.h"
|
||||
#include "networkd.h"
|
||||
#include "time-util.h"
|
||||
|
||||
typedef struct netdev_join_callback netdev_join_callback;
|
||||
typedef struct Link Link;
|
||||
|
||||
struct netdev_join_callback {
|
||||
sd_netlink_message_handler_t callback;
|
||||
@ -78,7 +76,10 @@ typedef enum NetDevCreateType {
|
||||
_NETDEV_CREATE_INVALID = -1,
|
||||
} NetDevCreateType;
|
||||
|
||||
struct NetDev {
|
||||
typedef struct Manager Manager;
|
||||
typedef struct Condition Condition;
|
||||
|
||||
typedef struct NetDev {
|
||||
Manager *manager;
|
||||
|
||||
int n_ref;
|
||||
@ -99,20 +100,9 @@ struct NetDev {
|
||||
int ifindex;
|
||||
|
||||
LIST_HEAD(netdev_join_callback, callbacks);
|
||||
};
|
||||
} NetDev;
|
||||
|
||||
#include "networkd-netdev-bond.h"
|
||||
#include "networkd-netdev-bridge.h"
|
||||
#include "networkd-netdev-dummy.h"
|
||||
#include "networkd-netdev-ipvlan.h"
|
||||
#include "networkd-netdev-macvlan.h"
|
||||
#include "networkd-netdev-tunnel.h"
|
||||
#include "networkd-netdev-tuntap.h"
|
||||
#include "networkd-netdev-veth.h"
|
||||
#include "networkd-netdev-vlan.h"
|
||||
#include "networkd-netdev-vxlan.h"
|
||||
|
||||
struct NetDevVTable {
|
||||
typedef struct NetDevVTable {
|
||||
/* How much memory does an object of this unit type need */
|
||||
size_t object_size;
|
||||
|
||||
@ -144,14 +134,14 @@ struct NetDevVTable {
|
||||
|
||||
/* verify that compulsory configuration options were specified */
|
||||
int (*config_verify)(NetDev *netdev, const char *filename);
|
||||
};
|
||||
} NetDevVTable;
|
||||
|
||||
extern const NetDevVTable * const netdev_vtable[_NETDEV_KIND_MAX];
|
||||
|
||||
#define NETDEV_VTABLE(n) netdev_vtable[(n)->kind]
|
||||
|
||||
/* For casting a netdev into the various netdev kinds */
|
||||
#define DEFINE_CAST(UPPERCASE, MixedCase) \
|
||||
#define DEFINE_NETDEV_CAST(UPPERCASE, MixedCase) \
|
||||
static inline MixedCase* UPPERCASE(NetDev *n) { \
|
||||
if (_unlikely_(!n || n->kind != NETDEV_KIND_##UPPERCASE)) \
|
||||
return NULL; \
|
||||
@ -162,27 +152,6 @@ extern const NetDevVTable * const netdev_vtable[_NETDEV_KIND_MAX];
|
||||
/* For casting the various netdev kinds into a netdev */
|
||||
#define NETDEV(n) (&(n)->meta)
|
||||
|
||||
DEFINE_CAST(BRIDGE, Bridge);
|
||||
DEFINE_CAST(BOND, Bond);
|
||||
DEFINE_CAST(VLAN, VLan);
|
||||
DEFINE_CAST(MACVLAN, MacVlan);
|
||||
DEFINE_CAST(MACVTAP, MacVlan);
|
||||
DEFINE_CAST(IPVLAN, IPVlan);
|
||||
DEFINE_CAST(VXLAN, VxLan);
|
||||
DEFINE_CAST(IPIP, Tunnel);
|
||||
DEFINE_CAST(GRE, Tunnel);
|
||||
DEFINE_CAST(GRETAP, Tunnel);
|
||||
DEFINE_CAST(IP6GRE, Tunnel);
|
||||
DEFINE_CAST(IP6GRETAP, Tunnel);
|
||||
DEFINE_CAST(SIT, Tunnel);
|
||||
DEFINE_CAST(VTI, Tunnel);
|
||||
DEFINE_CAST(VTI6, Tunnel);
|
||||
DEFINE_CAST(IP6TNL, Tunnel);
|
||||
DEFINE_CAST(VETH, Veth);
|
||||
DEFINE_CAST(DUMMY, Dummy);
|
||||
DEFINE_CAST(TUN, TunTap);
|
||||
DEFINE_CAST(TAP, TunTap);
|
||||
|
||||
int netdev_load(Manager *manager);
|
||||
void netdev_drop(NetDev *netdev);
|
||||
|
||||
|
@ -19,18 +19,19 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include "sd-bus.h"
|
||||
#include "udev.h"
|
||||
|
||||
#include "condition.h"
|
||||
#include "dhcp-identifier.h"
|
||||
#include "hashmap.h"
|
||||
#include "resolve-util.h"
|
||||
|
||||
typedef struct Network Network;
|
||||
|
||||
#include "dhcp-identifier.h"
|
||||
#include "networkd-address.h"
|
||||
#include "networkd-fdb.h"
|
||||
#include "networkd-netdev.h"
|
||||
#include "networkd-route.h"
|
||||
#include "networkd-util.h"
|
||||
#include "networkd.h"
|
||||
|
||||
#define DHCP_ROUTE_METRIC 1024
|
||||
#define IPV4LL_ROUTE_METRIC 2048
|
||||
@ -67,6 +68,8 @@ typedef enum LLDPMode {
|
||||
_LLDP_MODE_INVALID = -1,
|
||||
} LLDPMode;
|
||||
|
||||
typedef struct Manager Manager;
|
||||
|
||||
struct Network {
|
||||
Manager *manager;
|
||||
|
||||
|
@ -22,7 +22,6 @@
|
||||
typedef struct Route Route;
|
||||
|
||||
#include "networkd-network.h"
|
||||
#include "networkd.h"
|
||||
|
||||
struct Route {
|
||||
Network *network;
|
||||
|
@ -24,19 +24,30 @@
|
||||
#include "sd-bus.h"
|
||||
#include "sd-event.h"
|
||||
#include "sd-netlink.h"
|
||||
|
||||
#include "hashmap.h"
|
||||
#include "list.h"
|
||||
#include "udev.h"
|
||||
|
||||
typedef struct Manager Manager;
|
||||
|
||||
#include "dhcp-identifier.h"
|
||||
#include "hashmap.h"
|
||||
#include "list.h"
|
||||
|
||||
#include "networkd-address-pool.h"
|
||||
#include "networkd-link.h"
|
||||
#include "networkd-netdev-bond.h"
|
||||
#include "networkd-netdev-bridge.h"
|
||||
#include "networkd-netdev-dummy.h"
|
||||
#include "networkd-netdev-ipvlan.h"
|
||||
#include "networkd-netdev-macvlan.h"
|
||||
#include "networkd-netdev-tunnel.h"
|
||||
#include "networkd-netdev-tuntap.h"
|
||||
#include "networkd-netdev-veth.h"
|
||||
#include "networkd-netdev-vlan.h"
|
||||
#include "networkd-netdev-vlan.h"
|
||||
#include "networkd-netdev-vxlan.h"
|
||||
#include "networkd-network.h"
|
||||
#include "networkd-util.h"
|
||||
|
||||
extern const char* const network_dirs[];
|
||||
|
||||
struct Manager {
|
||||
sd_netlink *rtnl;
|
||||
sd_event *event;
|
||||
@ -71,10 +82,6 @@ struct Manager {
|
||||
uint8_t dhcp_duid[MAX_DUID_LEN];
|
||||
};
|
||||
|
||||
extern const char* const network_dirs[];
|
||||
|
||||
/* Manager */
|
||||
|
||||
extern const sd_bus_vtable manager_vtable[];
|
||||
|
||||
int manager_new(Manager **ret);
|
||||
|
Loading…
Reference in New Issue
Block a user