diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml index 449b23d5ac..ff0bdee51f 100644 --- a/man/systemd.netdev.xml +++ b/man/systemd.netdev.xml @@ -1994,7 +1994,7 @@ InterfaceId= Sets the ID/key of the xfrm interface which needs to be associated with a SA/policy. - Can be decimal or hexadecimal, valid range is 0-0xffffffff, defaults to 0. + Can be decimal or hexadecimal, valid range is 1-0xffffffff. This is mandatory. diff --git a/src/network/netdev/xfrm.c b/src/network/netdev/xfrm.c index 05844b8321..a961d8fef2 100644 --- a/src/network/netdev/xfrm.c +++ b/src/network/netdev/xfrm.c @@ -14,6 +14,7 @@ static int xfrm_fill_message_create(NetDev *netdev, Link *link, sd_netlink_messa x = XFRM(netdev); + assert(x); assert(link || x->independent); r = sd_netlink_message_append_u32(message, IFLA_XFRM_LINK, link ? link->ifindex : LOOPBACK_IFINDEX); @@ -27,10 +28,28 @@ static int xfrm_fill_message_create(NetDev *netdev, Link *link, sd_netlink_messa return 0; } +static int xfrm_verify(NetDev *netdev, const char *filename) { + Xfrm *x; + + assert(netdev); + assert(filename); + + x = XFRM(netdev); + + assert(x); + + if (x->if_id == 0) + return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL), + "%s: Xfrm interface ID cannot be zero.", filename); + + return 0; +} + const NetDevVTable xfrm_vtable = { .object_size = sizeof(Xfrm), .sections = NETDEV_COMMON_SECTIONS "Xfrm\0", .fill_message_create = xfrm_fill_message_create, + .config_verify = xfrm_verify, .create_type = NETDEV_CREATE_STACKED, .iftype = ARPHRD_NONE, };