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
|
* @s: Netlink socket
|
||||||
* @ifi: Interface index
|
* @ifi: Interface index
|
||||||
* @mtu: If non-zero, set interface MTU
|
* @mtu: Interface MTU
|
||||||
*
|
*
|
||||||
* Return: 0 on success, negative error code on failure
|
* 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 req_t {
|
||||||
struct nlmsghdr nlh;
|
struct nlmsghdr nlh;
|
||||||
|
@ -959,17 +959,32 @@ int nl_link_up(int s, unsigned int ifi, int mtu)
|
||||||
} req = {
|
} req = {
|
||||||
.ifm.ifi_family = AF_UNSPEC,
|
.ifm.ifi_family = AF_UNSPEC,
|
||||||
.ifm.ifi_index = ifi,
|
.ifm.ifi_index = ifi,
|
||||||
.ifm.ifi_flags = IFF_UP,
|
|
||||||
.ifm.ifi_change = IFF_UP,
|
|
||||||
.rta.rta_type = IFLA_MTU,
|
.rta.rta_type = IFLA_MTU,
|
||||||
.rta.rta_len = RTA_LENGTH(sizeof(unsigned int)),
|
.rta.rta_len = RTA_LENGTH(sizeof(unsigned int)),
|
||||||
.mtu = mtu,
|
.mtu = mtu,
|
||||||
};
|
};
|
||||||
ssize_t len = sizeof(req);
|
|
||||||
|
|
||||||
if (!mtu)
|
return nl_do(s, &req, RTM_NEWLINK, 0, sizeof(req));
|
||||||
/* Shorten request to drop MTU attribute */
|
}
|
||||||
len = offsetof(struct req_t, rta);
|
|
||||||
|
/**
|
||||||
return nl_do(s, &req, RTM_NEWLINK, 0, len);
|
* 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 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_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_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 */
|
#endif /* NETLINK_H */
|
||||||
|
|
7
pasta.c
7
pasta.c
|
@ -288,7 +288,7 @@ void pasta_ns_conf(struct ctx *c)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
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)
|
if (rc < 0)
|
||||||
die("Couldn't bring up loopback interface in namespace: %s",
|
die("Couldn't bring up loopback interface in namespace: %s",
|
||||||
strerror(-rc));
|
strerror(-rc));
|
||||||
|
@ -303,7 +303,10 @@ void pasta_ns_conf(struct ctx *c)
|
||||||
strerror(-rc));
|
strerror(-rc));
|
||||||
|
|
||||||
if (c->pasta_conf_ns) {
|
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->ifi4) {
|
||||||
if (c->ip4.no_copy_addrs) {
|
if (c->ip4.no_copy_addrs) {
|
||||||
|
|
Loading…
Reference in a new issue