mirror of
https://passt.top/passt
synced 2024-12-22 05:35:23 +00:00
Compare commits
2 Commits
69303cafbe
...
a7e4bfb857
Author | SHA1 | Date | |
---|---|---|---|
|
a7e4bfb857 | ||
|
5e4f7b92b0 |
16
netlink.c
16
netlink.c
@ -462,8 +462,21 @@ int nl_route_dup(int s_src, unsigned int ifi_src,
|
||||
|
||||
for (rta = RTM_RTA(rtm), na = RTM_PAYLOAD(nh); RTA_OK(rta, na);
|
||||
rta = RTA_NEXT(rta, na)) {
|
||||
if (rta->rta_type == RTA_OIF)
|
||||
if (rta->rta_type == RTA_OIF) {
|
||||
/* The host obviously list's the host interface
|
||||
* id here, we need to change it to the
|
||||
* namespace's interface id
|
||||
*/
|
||||
*(unsigned int *)RTA_DATA(rta) = ifi_dst;
|
||||
} else if (rta->rta_type == RTA_PREFSRC) {
|
||||
/* Host routes might include a preferred source
|
||||
* address, which must be one of the host's
|
||||
* addresses. However, with -a pasta will use a
|
||||
* different namespace address, making such a
|
||||
* route invalid in the namespace. Strip off
|
||||
* RTA_PREFSRC attributes to avoid that. */
|
||||
rta->rta_type = RTA_UNSPEC;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -629,6 +642,7 @@ int nl_addr_set(int s, unsigned int ifi, sa_family_t af,
|
||||
memcpy(&req.set.a4.l, addr, sizeof(req.set.a4.l));
|
||||
req.set.a4.rta_l.rta_len = rta_len;
|
||||
req.set.a4.rta_l.rta_type = IFA_LOCAL;
|
||||
memcpy(&req.set.a4.a, addr, sizeof(req.set.a4.a));
|
||||
req.set.a4.rta_a.rta_len = rta_len;
|
||||
req.set.a4.rta_a.rta_type = IFA_ADDRESS;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user