- return 1;
-}
-
-int config_parse_tunnel_address(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) {
- NetDev *n = data;
- unsigned char family = AF_INET;
- int r;
-
- assert(filename);
- assert(lvalue);
- assert(rvalue);
- assert(data);
-
- r = net_parse_inaddr(rvalue, &family, n);
- if (r < 0) {
- log_syntax(unit, LOG_ERR, filename, line, EINVAL,
- "Tunnel address is invalid, ignoring assignment: %s", rvalue);
- return 0;
- }
- return 0;
-}
-
-static int netdev_create(NetDev *netdev, Link *link, sd_rtnl_message_handler_t callback) {
- _cleanup_rtnl_message_unref_ sd_rtnl_message *req = NULL;
- const char *kind;
- int r;
-
- assert(netdev);
- assert(!(netdev->kind == NETDEV_KIND_VLAN || netdev->kind == NETDEV_KIND_MACVLAN) ||
- (link && callback));
- assert(netdev->ifname);
- assert(netdev->manager);
- assert(netdev->manager->rtnl);
-
- r = sd_rtnl_message_new_link(netdev->manager->rtnl, &req, RTM_NEWLINK, 0);
- if (r < 0) {
- log_error_netdev(netdev,
- "Could not allocate RTM_NEWLINK message: %s",
- strerror(-r));
- return r;
- }
-
- if (link) {
- r = sd_rtnl_message_append_u32(req, IFLA_LINK, link->ifindex);
- if (r < 0) {
- log_error_netdev(netdev,
- "Could not append IFLA_LINK attribute: %s",
- strerror(-r));
- return r;
- }
- }
-
- r = sd_rtnl_message_append_string(req, IFLA_IFNAME, netdev->ifname);
- if (r < 0) {
- log_error_netdev(netdev,
- "Could not append IFLA_IFNAME attribute: %s",
- strerror(-r));
- return r;
- }
-
- if (netdev->mtu) {
- r = sd_rtnl_message_append_u32(req, IFLA_MTU, netdev->mtu);
- if (r < 0) {
- log_error_netdev(netdev,
- "Could not append IFLA_MTU attribute: %s",
- strerror(-r));
- return r;
- }
- }
-
- if (netdev->mac) {
- r = sd_rtnl_message_append_ether_addr(req, IFLA_ADDRESS, netdev->mac);
- if (r < 0) {
- log_error_netdev(netdev,
- "Colud not append IFLA_ADDRESS attribute: %s",
- strerror(-r));
- return r;
- }
- }
-
- r = sd_rtnl_message_open_container(req, IFLA_LINKINFO);
- if (r < 0) {
- log_error_netdev(netdev,
- "Could not open IFLA_LINKINFO container: %s",
- strerror(-r));
- return r;
- }
-
- kind = netdev_kind_to_string(netdev->kind);
- if (!kind) {
- log_error_netdev(netdev, "Invalid kind");
- return -EINVAL;
- }
-
- r = sd_rtnl_message_open_container_union(req, IFLA_INFO_DATA, kind);
- if (r < 0) {
- log_error_netdev(netdev,
- "Could not open IFLA_INFO_DATA container: %s",
- strerror(-r));
- return r;
- }
-
- if (netdev->vlanid <= VLANID_MAX) {
- r = sd_rtnl_message_append_u16(req, IFLA_VLAN_ID, netdev->vlanid);
- if (r < 0) {
- log_error_netdev(netdev,
- "Could not append IFLA_VLAN_ID attribute: %s",
- strerror(-r));
- return r;
- }
- }
-
- if (netdev->macvlan_mode != _NETDEV_MACVLAN_MODE_INVALID) {
- r = sd_rtnl_message_append_u32(req, IFLA_MACVLAN_MODE, netdev->macvlan_mode);
- if (r < 0) {
- log_error_netdev(netdev,
- "Could not append IFLA_MACVLAN_MODE attribute: %s",
- strerror(-r));
- return r;
- }
- }
-
- r = sd_rtnl_message_close_container(req);
- if (r < 0) {
- log_error_netdev(netdev,
- "Could not close IFLA_INFO_DATA container %s",
- strerror(-r));
- return r;
- }
-
- r = sd_rtnl_message_close_container(req);
- if (r < 0) {
- log_error_netdev(netdev,
- "Could not close IFLA_LINKINFO container %s",
- strerror(-r));
- return r;
- }
-
- if (link)
- r = sd_rtnl_call_async(netdev->manager->rtnl, req, callback, link, 0, NULL);
- else
- r = sd_rtnl_call_async(netdev->manager->rtnl, req, &netdev_create_handler, netdev, 0, NULL);
- if (r < 0) {
- log_error_netdev(netdev,
- "Could not send rtnetlink message: %s", strerror(-r));
- return r;
- }
-
- log_debug_netdev(netdev, "creating netdev");