#pragma once
#include <arpa/inet.h>
-#include <linux/rtnetlink.h>
#include "sd-event.h"
#include "sd-rtnl.h"
#include "rtnl-util.h"
#include "hashmap.h"
#include "list.h"
+#include "condition-util.h"
-typedef struct Netdev Netdev;
+typedef struct NetDev NetDev;
typedef struct Network Network;
typedef struct Link Link;
typedef struct Address Address;
LIST_FIELDS(netdev_enslave_callback, callbacks);
};
-typedef enum NetdevKind {
+typedef enum NetDevKind {
NETDEV_KIND_BRIDGE,
NETDEV_KIND_BOND,
NETDEV_KIND_VLAN,
_NETDEV_KIND_MAX,
_NETDEV_KIND_INVALID = -1
-} NetdevKind;
+} NetDevKind;
-typedef enum NetdevState {
+typedef enum NetDevState {
NETDEV_STATE_FAILED,
NETDEV_STATE_CREATING,
NETDEV_STATE_READY,
_NETDEV_STATE_MAX,
_NETDEV_STATE_INVALID = -1,
-} NetdevState;
+} NetDevState;
-struct Netdev {
+struct NetDev {
Manager *manager;
char *filename;
+ Condition *condition_host;
+ Condition *condition_virt;
+ Condition *condition_kernel;
+
char *description;
char *name;
- NetdevKind kind;
+ NetDevKind kind;
- int vlanid;
+ uint64_t vlanid;
- Link *link;
- NetdevState state;
+ int ifindex;
+ NetDevState state;
LIST_HEAD(netdev_enslave_callback, callbacks);
};
char *match_driver;
char *match_type;
char *match_name;
+ Condition *match_host;
+ Condition *match_virt;
+ Condition *match_kernel;
char *description;
- Netdev *bridge;
- Netdev *bond;
- Netdev *vlan;
+ NetDev *bridge;
+ NetDev *bond;
+ Hashmap *vlans;
bool dhcp;
bool dhcp_dns;
bool dhcp_mtu;
Network *network;
- Route *dhcp_route;
- Address *dhcp_address;
- Address *dns;
- uint16_t original_mtu;
-
LinkState state;
unsigned addr_messages;
unsigned route_messages;
unsigned enslaving;
- sd_dhcp_client *dhcp;
+ sd_dhcp_client *dhcp_client;
+ sd_dhcp_lease *dhcp_lease;
+ uint16_t original_mtu;
};
struct Manager {
DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
#define _cleanup_manager_free_ _cleanup_(manager_freep)
-/* Netdev */
+/* NetDev */
int netdev_load(Manager *manager);
-void netdev_free(Netdev *netdev);
+void netdev_free(NetDev *netdev);
-DEFINE_TRIVIAL_CLEANUP_FUNC(Netdev*, netdev_free);
+DEFINE_TRIVIAL_CLEANUP_FUNC(NetDev*, netdev_free);
#define _cleanup_netdev_free_ _cleanup_(netdev_freep)
-int netdev_get(Manager *manager, const char *name, Netdev **ret);
-int netdev_set_link(Manager *m, NetdevKind kind, Link *link);
-int netdev_enslave(Netdev *netdev, Link *link, sd_rtnl_message_handler_t cb);
+int netdev_get(Manager *manager, const char *name, NetDev **ret);
+int netdev_set_ifindex(NetDev *netdev, int ifindex);
+int netdev_enslave(NetDev *netdev, Link *link, sd_rtnl_message_handler_t cb);
-const char *netdev_kind_to_string(NetdevKind d) _const_;
-NetdevKind netdev_kind_from_string(const char *d) _pure_;
+const char *netdev_kind_to_string(NetDevKind d) _const_;
+NetDevKind netdev_kind_from_string(const char *d) _pure_;
int config_parse_netdev_kind(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+/* gperf */
+const struct ConfigPerfItem* network_netdev_gperf_lookup(const char *key, unsigned length);
+
/* Network */
int network_load(Manager *manager);
int ltype, const char *rvalue, void *data, void *userdata);
/* gperf */
-
-const struct ConfigPerfItem* network_gperf_lookup(const char *key, unsigned length);
+const struct ConfigPerfItem* network_network_gperf_lookup(const char *key, unsigned length);
/* Route */
int route_new_static(Network *network, unsigned section, Route **ret);
int link_new(Manager *manager, struct udev_device *device, Link **ret);
void link_free(Link *link);
+int link_get(Manager *m, int ifindex, Link **ret);
int link_add(Manager *manager, struct udev_device *device, Link **ret);
int link_configure(Link *link);