Fix netlink with latest iproute

-----BEGIN PGP SIGNATURE-----
 
 iQJGBAABCAAwFiEEzS913cjjpNwuT1Fz8ww4vT8vvjwFAl+z6UoSHGxhdXJlbnRA
 dml2aWVyLmV1AAoJEPMMOL0/L748pEwP/1G4GYer/hC1bbAK4/0d6dppp0jjoV0J
 40fNsL5o7qRVV2vg/YomReV8A1lfJ4Vuv1Xt33MC3CxvNFOBJu9kAicH1Azf+H+Q
 mfEfZ8z2fqBk3ZaAgjH4glBNEdqAJU8GokVqHA+DJwsDhI3hSSsHt7qh/m9Pahnk
 zq0FBYKtRHlb4tO7WzX0oRkrnNDU7shualOcVzs0WVDfhrYz0OHcHBE7sqg3uaf6
 BLTOVXUIzR1jDuf78ywC+ugDWmCiliDBgF7g1LTizl86pGZyV7nCb+ll9X27gEO7
 zLMYR/jxwrcuk7Raz9KSQX+yyexfJL51ikmDGnIbQKnYr0BNMcsf+VnspM7ahmu9
 KLIgTpXoOoB1VBeuN/jOHm77Q9zwBjGdnnDwaX24qwJyqpOeqfip6fAHsJlvIDqJ
 Oz0F7hMqUb2iXG+hVQ3YnlEohS/H4006XJ2EXG5bdgJnRH65VU9IOrQtjrpkuMAW
 AVPXhWK5pU0X5RjnE+UPLvsWtNUok5gEyQMih+fOkTqA11hg8I80GGfy4x9Rz8TO
 NNEVx62v+cplUePUSDvCxymANBriAGz4Bh3sslSVkKkTqc2D3HK167MsBJJBP3wL
 46Lf6OqlDUAv+3C4D5N+LhFk0RVT3soMn8bJlgfOHjTbbgKlU1PBOCOrs63oXbTA
 Uf7jrM3SMN/n
 =523y
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/vivier2/tags/linux-user-for-5.2-pull-request' into staging

Fix netlink with latest iproute

# gpg: Signature made Tue 17 Nov 2020 15:16:26 GMT
# gpg:                using RSA key CD2F75DDC8E3A4DC2E4F5173F30C38BD3F2FBE3C
# gpg:                issuer "laurent@vivier.eu"
# gpg: Good signature from "Laurent Vivier <lvivier@redhat.com>" [full]
# gpg:                 aka "Laurent Vivier <laurent@vivier.eu>" [full]
# gpg:                 aka "Laurent Vivier (Red Hat) <lvivier@redhat.com>" [full]
# Primary key fingerprint: CD2F 75DD C8E3 A4DC 2E4F  5173 F30C 38BD 3F2F BE3C

* remotes/vivier2/tags/linux-user-for-5.2-pull-request:
  linux-user,netlink: add IFLA_BRPORT_MRP_RING_OPEN, IFLA_BRPORT_MRP_IN_OPEN
  linux-user,netlink: fix message translation with ip command

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2020-11-17 22:06:40 +00:00
commit 4b52475866
1 changed files with 14 additions and 4 deletions

View File

@ -175,6 +175,8 @@ enum {
QEMU_IFLA_BRPORT_NEIGH_SUPPRESS, QEMU_IFLA_BRPORT_NEIGH_SUPPRESS,
QEMU_IFLA_BRPORT_ISOLATED, QEMU_IFLA_BRPORT_ISOLATED,
QEMU_IFLA_BRPORT_BACKUP_PORT, QEMU_IFLA_BRPORT_BACKUP_PORT,
QEMU_IFLA_BRPORT_MRP_RING_OPEN,
QEMU_IFLA_BRPORT_MRP_IN_OPEN,
QEMU___IFLA_BRPORT_MAX QEMU___IFLA_BRPORT_MAX
}; };
@ -552,6 +554,8 @@ static abi_long host_to_target_slave_data_bridge_nlattr(struct nlattr *nlattr,
case QEMU_IFLA_BRPORT_BCAST_FLOOD: case QEMU_IFLA_BRPORT_BCAST_FLOOD:
case QEMU_IFLA_BRPORT_NEIGH_SUPPRESS: case QEMU_IFLA_BRPORT_NEIGH_SUPPRESS:
case QEMU_IFLA_BRPORT_ISOLATED: case QEMU_IFLA_BRPORT_ISOLATED:
case QEMU_IFLA_BRPORT_MRP_RING_OPEN:
case QEMU_IFLA_BRPORT_MRP_IN_OPEN:
break; break;
/* uint16_t */ /* uint16_t */
case QEMU_IFLA_BRPORT_PRIORITY: case QEMU_IFLA_BRPORT_PRIORITY:
@ -1125,7 +1129,14 @@ static abi_long target_to_host_for_each_rtattr(struct rtattr *rtattr,
static abi_long target_to_host_data_link_rtattr(struct rtattr *rtattr) static abi_long target_to_host_data_link_rtattr(struct rtattr *rtattr)
{ {
uint32_t *u32;
switch (rtattr->rta_type) { switch (rtattr->rta_type) {
/* uint32_t */
case QEMU_IFLA_EXT_MASK:
u32 = RTA_DATA(rtattr);
*u32 = tswap32(*u32);
break;
default: default:
qemu_log_mask(LOG_UNIMP, "Unknown target QEMU_IFLA type: %d\n", qemu_log_mask(LOG_UNIMP, "Unknown target QEMU_IFLA type: %d\n",
rtattr->rta_type); rtattr->rta_type);
@ -1160,6 +1171,7 @@ static abi_long target_to_host_data_route_rtattr(struct rtattr *rtattr)
break; break;
/* u32 */ /* u32 */
case QEMU_RTA_PRIORITY: case QEMU_RTA_PRIORITY:
case QEMU_RTA_TABLE:
case QEMU_RTA_OIF: case QEMU_RTA_OIF:
u32 = RTA_DATA(rtattr); u32 = RTA_DATA(rtattr);
*u32 = tswap32(*u32); *u32 = tswap32(*u32);
@ -1200,11 +1212,10 @@ static abi_long target_to_host_data_route(struct nlmsghdr *nlh)
struct rtmsg *rtm; struct rtmsg *rtm;
switch (nlh->nlmsg_type) { switch (nlh->nlmsg_type) {
case RTM_GETLINK:
break;
case RTM_NEWLINK: case RTM_NEWLINK:
case RTM_DELLINK: case RTM_DELLINK:
case RTM_SETLINK: case RTM_SETLINK:
case RTM_GETLINK:
if (nlh->nlmsg_len >= NLMSG_LENGTH(sizeof(*ifi))) { if (nlh->nlmsg_len >= NLMSG_LENGTH(sizeof(*ifi))) {
ifi = NLMSG_DATA(nlh); ifi = NLMSG_DATA(nlh);
ifi->ifi_type = tswap16(ifi->ifi_type); ifi->ifi_type = tswap16(ifi->ifi_type);
@ -1225,10 +1236,9 @@ static abi_long target_to_host_data_route(struct nlmsghdr *nlh)
NLMSG_LENGTH(sizeof(*ifa))); NLMSG_LENGTH(sizeof(*ifa)));
} }
break; break;
case RTM_GETROUTE:
break;
case RTM_NEWROUTE: case RTM_NEWROUTE:
case RTM_DELROUTE: case RTM_DELROUTE:
case RTM_GETROUTE:
if (nlh->nlmsg_len >= NLMSG_LENGTH(sizeof(*rtm))) { if (nlh->nlmsg_len >= NLMSG_LENGTH(sizeof(*rtm))) {
rtm = NLMSG_DATA(nlh); rtm = NLMSG_DATA(nlh);
rtm->rtm_flags = tswap32(rtm->rtm_flags); rtm->rtm_flags = tswap32(rtm->rtm_flags);