diff options
author | Tom Gundersen <teg@jklm.no> | 2014-12-04 15:52:21 +0100 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2014-12-04 16:02:05 +0100 |
commit | 9e7e440835c43d81ffdbc299d2c07daaa641ed50 (patch) | |
tree | 9b55e90d4085997aeebaa738198765d2fa5bac4a /src/libsystemd/sd-rtnl/rtnl-message.c | |
parent | 66bba0e701b95dc42ed53e8f0799a7e2b944c147 (diff) |
networkd: add support for source routing
Diffstat (limited to 'src/libsystemd/sd-rtnl/rtnl-message.c')
-rw-r--r-- | src/libsystemd/sd-rtnl/rtnl-message.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/libsystemd/sd-rtnl/rtnl-message.c b/src/libsystemd/sd-rtnl/rtnl-message.c index a2f75471b4..4491a00f4f 100644 --- a/src/libsystemd/sd-rtnl/rtnl-message.c +++ b/src/libsystemd/sd-rtnl/rtnl-message.c @@ -114,6 +114,24 @@ int sd_rtnl_message_route_set_dst_prefixlen(sd_rtnl_message *m, unsigned char pr return 0; } +int sd_rtnl_message_route_set_src_prefixlen(sd_rtnl_message *m, unsigned char prefixlen) { + struct rtmsg *rtm; + + assert_return(m, -EINVAL); + assert_return(m->hdr, -EINVAL); + assert_return(rtnl_message_type_is_route(m->hdr->nlmsg_type), -EINVAL); + + rtm = NLMSG_DATA(m->hdr); + + if ((rtm->rtm_family == AF_INET && prefixlen > 32) || + (rtm->rtm_family == AF_INET6 && prefixlen > 128)) + return -ERANGE; + + rtm->rtm_src_len = prefixlen; + + return 0; +} + int sd_rtnl_message_route_set_scope(sd_rtnl_message *m, unsigned char scope) { struct rtmsg *rtm; |