netlink, pasta: Split MTU setting functionality out of nl_link_up()
As we'll use nl_link_up() for more than just bringing up devices, it will become awkward to carry empty MTU values around whenever we call it. Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
b91d3373ac
commit
8231ce54c3
3 changed files with 33 additions and 14 deletions
37
netlink.c
37
netlink.c
|
@ -942,14 +942,14 @@ int nl_link_set_mac(int s, unsigned int ifi, const void *mac)
|
|||
}
|
||||
|
||||
/**
|
||||
* nl_link_up() - Bring link up
|
||||
* nl_link_set_mtu() - Set link MTU
|
||||
* @s: Netlink socket
|
||||
* @ifi: Interface index
|
||||
* @mtu: If non-zero, set interface MTU
|
||||
* @mtu: Interface MTU
|
||||
*
|
||||
* Return: 0 on success, negative error code on failure
|
||||
*/
|
||||
int nl_link_up(int s, unsigned int ifi, int mtu)
|
||||
int nl_link_set_mtu(int s, unsigned int ifi, int mtu)
|
||||
{
|
||||
struct req_t {
|
||||
struct nlmsghdr nlh;
|
||||
|
@ -959,17 +959,32 @@ int nl_link_up(int s, unsigned int ifi, int mtu)
|
|||
} req = {
|
||||
.ifm.ifi_family = AF_UNSPEC,
|
||||
.ifm.ifi_index = ifi,
|
||||
.ifm.ifi_flags = IFF_UP,
|
||||
.ifm.ifi_change = IFF_UP,
|
||||
.rta.rta_type = IFLA_MTU,
|
||||
.rta.rta_len = RTA_LENGTH(sizeof(unsigned int)),
|
||||
.mtu = mtu,
|
||||
};
|
||||
ssize_t len = sizeof(req);
|
||||
|
||||
if (!mtu)
|
||||
/* Shorten request to drop MTU attribute */
|
||||
len = offsetof(struct req_t, rta);
|
||||
|
||||
return nl_do(s, &req, RTM_NEWLINK, 0, len);
|
||||
return nl_do(s, &req, RTM_NEWLINK, 0, sizeof(req));
|
||||
}
|
||||
|
||||
/**
|
||||
* nl_link_up() - Bring link up
|
||||
* @s: Netlink socket
|
||||
* @ifi: Interface index
|
||||
*
|
||||
* Return: 0 on success, negative error code on failure
|
||||
*/
|
||||
int nl_link_up(int s, unsigned int ifi)
|
||||
{
|
||||
struct req_t {
|
||||
struct nlmsghdr nlh;
|
||||
struct ifinfomsg ifm;
|
||||
} req = {
|
||||
.ifm.ifi_family = AF_UNSPEC,
|
||||
.ifm.ifi_index = ifi,
|
||||
.ifm.ifi_flags = IFF_UP,
|
||||
.ifm.ifi_change = IFF_UP,
|
||||
};
|
||||
|
||||
return nl_do(s, &req, RTM_NEWLINK, 0, sizeof(req));
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ int nl_addr_dup(int s_src, unsigned int ifi_src,
|
|||
int s_dst, unsigned int ifi_dst, sa_family_t af);
|
||||
int nl_link_get_mac(int s, unsigned int ifi, void *mac);
|
||||
int nl_link_set_mac(int s, unsigned int ifi, const void *mac);
|
||||
int nl_link_up(int s, unsigned int ifi, int mtu);
|
||||
int nl_link_set_mtu(int s, unsigned int ifi, int mtu);
|
||||
int nl_link_up(int s, unsigned int ifi);
|
||||
|
||||
#endif /* NETLINK_H */
|
||||
|
|
7
pasta.c
7
pasta.c
|
@ -288,7 +288,7 @@ void pasta_ns_conf(struct ctx *c)
|
|||
{
|
||||
int rc = 0;
|
||||
|
||||
rc = nl_link_up(nl_sock_ns, 1 /* lo */, 0);
|
||||
rc = nl_link_up(nl_sock_ns, 1 /* lo */);
|
||||
if (rc < 0)
|
||||
die("Couldn't bring up loopback interface in namespace: %s",
|
||||
strerror(-rc));
|
||||
|
@ -303,7 +303,10 @@ void pasta_ns_conf(struct ctx *c)
|
|||
strerror(-rc));
|
||||
|
||||
if (c->pasta_conf_ns) {
|
||||
nl_link_up(nl_sock_ns, c->pasta_ifi, c->mtu);
|
||||
if (c->mtu != -1)
|
||||
nl_link_set_mtu(nl_sock_ns, c->pasta_ifi, c->mtu);
|
||||
|
||||
nl_link_up(nl_sock_ns, c->pasta_ifi);
|
||||
|
||||
if (c->ifi4) {
|
||||
if (c->ip4.no_copy_addrs) {
|
||||
|
|
Loading…
Reference in a new issue