1
1
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:
Zbigniew Jędrzejewski-Szmek 2016-04-28 22:52:04 -04:00
parent 26ccc1d087
commit 634f0f983c
29 changed files with 115 additions and 100 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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) {

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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"

View File

@ -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);

View File

@ -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 */

View File

@ -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;

View File

@ -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"

View File

@ -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_;

View File

@ -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 */

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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_;

View File

@ -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;

View File

@ -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;

View File

@ -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"

View File

@ -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;

View File

@ -30,4 +30,5 @@ struct Veth {
struct ether_addr *mac_peer;
};
DEFINE_NETDEV_CAST(VETH, Veth);
extern const NetDevVTable veth_vtable;

View File

@ -31,4 +31,5 @@ struct VLan {
uint64_t id;
};
DEFINE_NETDEV_CAST(VLAN, VLan);
extern const NetDevVTable vlan_vtable;

View File

@ -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"

View File

@ -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,

View File

@ -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);

View File

@ -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;

View File

@ -22,7 +22,6 @@
typedef struct Route Route;
#include "networkd-network.h"
#include "networkd.h"
struct Route {
Network *network;

View File

@ -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);