amarao (amarao_san) wrote,
amarao
amarao_san

sr-iov && ixgbe

Почему-то ixgbe не хочет выставлять rate у vf для "Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection".

Выглядит это так:
ip l
12: eth0:  mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
    link/ether 00:25:90:06:e2:ee brd ff:ff:ff:ff:ff:ff
    vf 0 MAC 00:00:00:00:00:00, spoof checking on
    vf 1 MAC 00:00:00:00:00:00, spoof checking on


При этом маки/vlan'ы/spoofing выставляется нормально:
ip l s eth0 vf 0 spoofchk off
ip l s eth0 vf 0 mac de:ad:be:af:fe:de 
ip l s eth0 vf 0 spoofchk off
ip l s eth0 vf 0 vlan 999
ip l 
Not enough information: "dev" argument is required.
12: eth0:  mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
    link/ether 00:25:90:06:e2:ee brd ff:ff:ff:ff:ff:ff
    vf 0 MAC de:ad:be:af:fe:de, vlan 999, spoof checking off
    vf 1 MAC 00:00:00:00:00:00, spoof checking on


А вот при попытке выставить rate оно всё ломается:
ip l s eth0 vf 0 rate 500
RTNETLINK answers: Invalid argument


Пропускаем всё промежуточное, вот код из ядра:

net/core/rtnetlink.c
http://lxr.free-electrons.com/source/net/core/rtnetlink.c#L1205
В сокращении:

 static int do_setvfinfo(struct net_device *dev, struct nlattr *attr)
 {
         int rem, err = -EINVAL;
         struct nlattr *vf;
         const struct net_device_ops *ops = dev->netdev_ops;
         nla_for_each_nested(vf, attr, rem) {
                 switch (nla_type(vf)) {
                 ...
                 case IFLA_VF_TX_RATE: {
                         struct ifla_vf_tx_rate *ivt;
                         ivt = nla_data(vf);
                         err = -EOPNOTSUPP;
                         if (ops->ndo_set_vf_tx_rate)
                                 err = ops->ndo_set_vf_tx_rate(dev, ivt->vf,
                                                               ivt->rate);
                         break;
                 }
                 ...
                 default:
                         err = -EINVAL;
                         break;
                 }
                 if (err)
                         break;
         }
         return err;
}


Внимание, что важно, нам возвращают Invalid Argument, что на самом деле EINVAL (22), то есть мы сваливаемся не на EPNOTSUPP (524), а на default. Что есть очень странно.

Хотя, возможно, это тонкости работы netlink'а с iproute2.



strace -x -e read=all -e write=all -e trace=network ip l s eth0 vf 0 rate 2
socket(PF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, 0) = 3
setsockopt(3, SOL_SOCKET, SO_SNDBUF, [32768], 4) = 0
setsockopt(3, SOL_SOCKET, SO_RCVBUF, [1048576], 4) = 0
bind(3, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 0
getsockname(3, {sa_family=AF_NETLINK, pid=5310, groups=00000000}, [12]) = 0
sendto(3, "\x20\x00\x00\x00\x10\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 32, 0, NULL, 0) = 32
 | 00000  20 00 00 00 10 00 05 00  00 00 00 00 00 00 00 00   ....... ........ |
 | 00010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ........ ........ |
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\x34\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xbe\x14\x00\x00\xed\xff\xff\xff\x20\x00\x00\x00\x10\x00\x05\x00\x00\x00\x00\x00"..., 8192}], msg_controllen=0, msg_flags=0}, 0) = 52
socket(PF_FILE, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 4
sendmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\x34\x00\x00\x00\x10\x00\x05\x00\xb3\x77\x28\x52\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"..., 52}], msg_controllen=0, msg_flags=0}, 0) = 52
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\x48\x00\x00\x00\x02\x00\x00\x00\xb3\x77\x28\x52\xbe\x14\x00\x00\xea\xff\xff\xff\x34\x00\x00\x00\x10\x00\x05\x00\xb3\x77\x28\x52"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 72
RTNETLINK answers: Invalid argument


Изменение параметра rate не меняет содержиме дампа для sendto. Судя по всему, это iproute2 козлит. Перед тем, как его начать отлаживать, изучим багрепорты...
Tags: iproute2, ixge, linux kernel, netlink, sr-iov
Subscribe

  • Очередная жидкая кака от цитрикса

    Так долго старательно бегали с попаданием в репозитории Дебиана. Никогда такого не было, и вот опять жидко обкакались с мейнтенингом.…

  • KVM vs Xen

    Скажу ровно две вещи, которые для меня стали практически рубиконом в отношении к Зену. Предположим, у вас overprovision диск. Виртуалка делает…

  • Решето

    CVE-2013-4554 / XSA-76 Гипервызовы с 1-2 колец привелегий не проверяются на permission'ы. Только 3 и 0. facepalm. Рекурсивный.

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments