if (strequal(value, "veth")) {
netdev->type = LXC_NET_VETH;
- lxc_list_init(&netdev->priv.veth_attr.ipv4_routes);
+ INIT_LIST_HEAD(&netdev->priv.veth_attr.ipv4_routes);
lxc_list_init(&netdev->priv.veth_attr.ipv6_routes);
lxc_list_init(&netdev->priv.veth_attr.vlan_tagged_ids);
if (!lxc_veth_flag_to_mode(netdev->priv.veth_attr.mode))
{
__do_free char *valdup = NULL;
__do_free struct lxc_inetdev *inetdev = NULL;
- __do_free struct lxc_list *list = NULL;
int ret;
char *netmask, *slash;
struct lxc_netdev *netdev = data;
if (!inetdev)
return ret_errno(ENOMEM);
- list = lxc_list_new();
- if (!list)
- return ret_errno(ENOMEM);
-
- list->elem = inetdev;
-
valdup = strdup(value);
if (!valdup)
return ret_errno(ENOMEM);
if (!ret || ret < 0)
return ret_errno(EINVAL);
- lxc_list_add_tail(&netdev->priv.veth_attr.ipv4_routes, list);
+ list_add_tail(&inetdev->head, &netdev->priv.veth_attr.ipv4_routes);
move_ptr(inetdev);
- move_ptr(list);
return 0;
}
struct lxc_conf *lxc_conf, void *data)
{
struct lxc_netdev *netdev = data;
- struct lxc_list *cur, *next;
+ struct lxc_inetdev *inetdev, *ninetdev;
if (!netdev)
return ret_errno(EINVAL);
if (netdev->type != LXC_NET_VETH)
return 0;
- lxc_list_for_each_safe(cur, &netdev->priv.veth_attr.ipv4_routes, next) {
- lxc_list_del(cur);
- free(cur->elem);
- free(cur);
+ list_for_each_entry_safe(inetdev, ninetdev, &netdev->priv.veth_attr.ipv4_routes, head) {
+ list_del(&inetdev->head);
+ free(inetdev);
}
return 0;
int len;
size_t listlen;
char buf[INET_ADDRSTRLEN];
- struct lxc_list *it;
+ struct lxc_inetdev *inetdev;
int fulllen = 0;
struct lxc_netdev *netdev = data;
else
memset(retv, 0, inlen);
- listlen = lxc_list_len(&netdev->priv.veth_attr.ipv4_routes);
-
- lxc_list_for_each(it, &netdev->priv.veth_attr.ipv4_routes) {
- struct lxc_inetdev *i = it->elem;
- if (!inet_ntop(AF_INET, &i->addr, buf, sizeof(buf)))
+ listlen = list_len(&netdev->priv.veth_attr.ipv4_routes);
+ list_for_each_entry(inetdev, &netdev->priv.veth_attr.ipv4_routes, head) {
+ if (!inet_ntop(AF_INET, &inetdev->addr, buf, sizeof(buf)))
return -errno;
- strprint(retv, inlen, "%s/%u%s", buf, i->prefix,
+ strprint(retv, inlen, "%s/%u%s", buf, inetdev->prefix,
(listlen-- > 1) ? "\n" : "");
}
}
if (netdev->type == LXC_NET_VETH) {
- lxc_list_for_each_safe(cur, &netdev->priv.veth_attr.ipv4_routes, next) {
- inet4dev = cur->elem;
+ list_for_each_entry(inet4dev, &netdev->priv.veth_attr.ipv4_routes, head) {
if (!inet_ntop(AF_INET, &inet4dev->addr, bufinet4, sizeof(bufinet4))) {
ERROR("Invalid ipv4 veth route");
return;
}
if (netdev->type == LXC_NET_VETH) {
- lxc_list_for_each_safe(cur, &netdev->priv.veth_attr.ipv4_routes, next) {
- lxc_list_del(cur);
- free(cur->elem);
- free(cur);
+ list_for_each_entry_safe(inetdev, ninetdev, &netdev->priv.veth_attr.ipv4_routes, head) {
+ list_del(&inetdev->head);
+ free(inetdev);
}
lxc_list_for_each_safe(cur, &netdev->priv.veth_attr.ipv6_routes, next) {
return lxc_ip_route_dest(RTM_DELROUTE, AF_INET6, ifindex, dest, netmask);
}
-static int lxc_setup_ipv4_routes(struct lxc_list *ip, int ifindex)
+static int setup_ipv4_routes(struct lxc_netdev *netdev)
{
- struct lxc_list *iterator;
+ int ifindex = netdev->priv.veth_attr.ifindex;
+ struct lxc_inetdev *inetdev;
int err;
- lxc_list_for_each(iterator, ip) {
- struct lxc_inetdev *inetdev = iterator->elem;
-
+ list_for_each_entry(inetdev, &netdev->priv.veth_attr.ipv4_routes, head) {
err = lxc_ipv4_dest_add(ifindex, &inetdev->addr, inetdev->prefix);
if (err)
return log_error_errno(-1, -err, "Failed to setup ipv4 route for network device with ifindex %d", ifindex);
}
/* setup ipv4 routes on the host interface */
- if (lxc_setup_ipv4_routes(&netdev->priv.veth_attr.ipv4_routes, netdev->priv.veth_attr.ifindex)) {
+ if (setup_ipv4_routes(netdev)) {
ERROR("Failed to setup ipv4 routes for network device \"%s\"", veth1);
goto out_delete;
}