* [iproute2 PATCH 2/4] libnetlink: Modify parser to track the first duplicated attributes
2010-01-30 10:42 [iproute2 PATCH 1/4] if_link: Sync header with kernel to get new VF configuration defines Jeff Kirsher
@ 2010-01-30 10:42 ` Jeff Kirsher
2010-01-30 10:43 ` [iproute2 PATCH 3/4] ip: Add support for SR-IOV function link parameters Jeff Kirsher
2010-01-30 10:43 ` [iproute2 PATCH 4/4] ip: Update man page to indicate current options Jeff Kirsher
2 siblings, 0 replies; 4+ messages in thread
From: Jeff Kirsher @ 2010-01-30 10:42 UTC (permalink / raw)
To: davem, shemminger; +Cc: netdev, gospo, Mitch Williams, Jeff Kirsher
From: Williams, Mitch A <mitch.a.williams@intel.com>
Modify the parser to keep track of the first of any duplicated attributes,
instead of the last. This is required for VF configuration reporting, where
multiple attributes of the same type are added sequentially.
Signed-off-by: Mitch Williams <mitch.a.williams@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
lib/libnetlink.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/lib/libnetlink.c b/lib/libnetlink.c
index 4ba6019..cfeb894 100644
--- a/lib/libnetlink.c
+++ b/lib/libnetlink.c
@@ -644,7 +644,7 @@ int parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len)
{
memset(tb, 0, sizeof(struct rtattr *) * (max + 1));
while (RTA_OK(rta, len)) {
- if (rta->rta_type <= max)
+ if ((rta->rta_type <= max) && (!tb[rta->rta_type]))
tb[rta->rta_type] = rta;
rta = RTA_NEXT(rta,len);
}
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [iproute2 PATCH 3/4] ip: Add support for SR-IOV function link parameters
2010-01-30 10:42 [iproute2 PATCH 1/4] if_link: Sync header with kernel to get new VF configuration defines Jeff Kirsher
2010-01-30 10:42 ` [iproute2 PATCH 2/4] libnetlink: Modify parser to track the first duplicated attributes Jeff Kirsher
@ 2010-01-30 10:43 ` Jeff Kirsher
2010-01-30 10:43 ` [iproute2 PATCH 4/4] ip: Update man page to indicate current options Jeff Kirsher
2 siblings, 0 replies; 4+ messages in thread
From: Jeff Kirsher @ 2010-01-30 10:43 UTC (permalink / raw)
To: davem, shemminger; +Cc: netdev, gospo, Mitch Williams, Jeff Kirsher
From: Williams, Mitch A <mitch.a.williams@intel.com>
Add support to 'ip' for setting and showing SR-IOV virtual function link
parameters.
Signed-off-by: Mitch Williams <mitch.a.williams@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
ip/ipaddress.c | 23 +++++++++++++++++++++++
ip/iplink.c | 39 +++++++++++++++++++++++++++++++++++++++
2 files changed, 62 insertions(+), 0 deletions(-)
diff --git a/ip/ipaddress.c b/ip/ipaddress.c
index 91c7b1b..d39a675 100644
--- a/ip/ipaddress.c
+++ b/ip/ipaddress.c
@@ -331,6 +331,29 @@ int print_linkinfo(const struct sockaddr_nl *who,
);
}
}
+ if (do_link && tb[IFLA_VFINFO] && tb[IFLA_NUM_VF]) {
+ SPRINT_BUF(b1);
+ struct rtattr *rta = tb[IFLA_VFINFO];
+ struct ifla_vf_info *ivi;
+ int i;
+ for (i = 0; i < *(int *)RTA_DATA(tb[IFLA_NUM_VF]); i++) {
+ if (rta->rta_type != IFLA_VFINFO) {
+ fprintf(stderr, "BUG: rta type is %d\n", rta->rta_type);
+ break;
+ }
+ ivi = RTA_DATA(rta);
+ fprintf(fp, "\n vf %d: MAC %s",
+ ivi->vf,
+ ll_addr_n2a((unsigned char *)&ivi->mac,
+ ETH_ALEN, 0, b1, sizeof(b1)));
+ if (ivi->vlan)
+ fprintf(fp, ", vlan %d", ivi->vlan);
+ if (ivi->tx_rate)
+ fprintf(fp, ", tx rate %d (Mbps_",
+ ivi->tx_rate);
+ rta = (struct rtattr *)((char *)rta + RTA_ALIGN(rta->rta_len));
+ }
+ }
fprintf(fp, "\n");
fflush(fp);
return 0;
diff --git a/ip/iplink.c b/ip/iplink.c
index 32cce24..88a5606 100644
--- a/ip/iplink.c
+++ b/ip/iplink.c
@@ -68,6 +68,9 @@ void iplink_usage(void)
fprintf(stderr, " [ mtu MTU ]\n");
fprintf(stderr, " [ netns PID ]\n");
fprintf(stderr, " [ alias NAME ]\n");
+ fprintf(stderr, " [ vf NUM [ mac LLADDR ]\n");
+ fprintf(stderr, " [ vlan VLANID ] ] \n");
+ fprintf(stderr, " [ rate TXRATE ] ] \n");
fprintf(stderr, " ip link show [ DEVICE ]\n");
if (iplink_have_newlink()) {
@@ -181,6 +184,7 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req,
int qlen = -1;
int mtu = -1;
int netns = -1;
+ int vf = -1;
ret = argc;
@@ -278,6 +282,41 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req,
req->i.ifi_flags |= IFF_NOARP;
} else
return on_off("noarp");
+ } else if (strcmp(*argv, "vf") == 0) {
+ NEXT_ARG();
+ if (get_integer(&vf, *argv, 0)) {
+ invarg("Invalid \"vf\" value\n", *argv);
+ }
+ } else if (matches(*argv, "mac") == 0) {
+ struct ifla_vf_mac ivm;
+ NEXT_ARG();
+ if (vf < 0)
+ missarg("vf");
+ ivm.vf = vf;
+ len = ll_addr_a2n((char *)ivm.mac, 32, *argv);
+ if (len < 0)
+ return -1;
+ addattr_l(&req->n, sizeof(*req), IFLA_VF_MAC, &ivm, sizeof(ivm));
+ } else if (matches(*argv, "vlan") == 0) {
+ struct ifla_vf_vlan ivv;
+ NEXT_ARG();
+ if (vf < 0)
+ missarg("vf");
+ if (get_integer(&ivv.vlan, *argv, 0)) {
+ invarg("Invalid \"vlan\" value\n", *argv);
+ }
+ ivv.vf = vf;
+ addattr_l(&req->n, sizeof(*req), IFLA_VF_VLAN, &ivv, sizeof(ivv));
+ } else if (matches(*argv, "rate") == 0) {
+ struct ifla_vf_tx_rate ivt;
+ NEXT_ARG();
+ if (vf < 0)
+ missarg("vf");
+ if (get_unsigned(&ivt.rate, *argv, 0)) {
+ invarg("Invalid \"rate\" value\n", *argv);
+ }
+ ivt.vf = vf;
+ addattr_l(&req->n, sizeof(*req), IFLA_VF_TX_RATE, &ivt, sizeof(ivt));
#ifdef IFF_DYNAMIC
} else if (matches(*argv, "dynamic") == 0) {
NEXT_ARG();
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [iproute2 PATCH 4/4] ip: Update man page to indicate current options.
2010-01-30 10:42 [iproute2 PATCH 1/4] if_link: Sync header with kernel to get new VF configuration defines Jeff Kirsher
2010-01-30 10:42 ` [iproute2 PATCH 2/4] libnetlink: Modify parser to track the first duplicated attributes Jeff Kirsher
2010-01-30 10:43 ` [iproute2 PATCH 3/4] ip: Add support for SR-IOV function link parameters Jeff Kirsher
@ 2010-01-30 10:43 ` Jeff Kirsher
2 siblings, 0 replies; 4+ messages in thread
From: Jeff Kirsher @ 2010-01-30 10:43 UTC (permalink / raw)
To: davem, shemminger; +Cc: netdev, gospo, Mitch Williams, Jeff Kirsher
From: Williams, Mitch A <mitch.a.williams@intel.com>
Signed-off-by: Mitch Williams <mitch.a.williams@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
man/man8/ip.8 | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 54 insertions(+), 3 deletions(-)
diff --git a/man/man8/ip.8 b/man/man8/ip.8
index 273be92..dd323a4 100644
--- a/man/man8/ip.8
+++ b/man/man8/ip.8
@@ -53,7 +53,21 @@ ip \- show / manipulate routing, devices, policy routing and tunnels
.IR MTU " |"
.br
.B netns
-.IR PID " }"
+.IR PID " |"
+.br
+.B alias
+.IR NAME " |"
+.br
+.B vf
+.IR NUM " ["
+.B mac
+.IR LLADDR " ] ["
+.B vlan
+.IR VLANID " ] ["
+.B rate
+.IR TXRATE " ]"
+.BR " }"
+
.ti -8
.B ip link show
@@ -826,7 +840,9 @@ display and change the state of devices.
.TP
.BI dev " NAME " (default)
.I NAME
-specifies network device to operate on.
+specifies network device to operate on. When configuring SR-IOV Virtual Fuction
+(VF) devices, this keyword should specify the associated Physical Function (PF)
+device.
.TP
.BR up " and " down
@@ -888,7 +904,42 @@ the interface is
.TP
.BI netns " PID"
move the device to the network namespace associated with the process
-.IR "PID" .
+.IR "PID".
+
+.TP
+.BI alias " NAME"
+give the device a symbolic name for easy reference.
+
+.TP
+.BI vf " NUM"
+specify a Virtual Function device to be configured. The associated PF device
+must be specified using the
+.B dev
+parameter.
+
+.in +8
+.BI mac " LLADDRESS"
+- change the station address for the specified VF. The
+.B vf
+parameter must be specified.
+
+.sp
+.BI vlan " VLANID"
+- change the assigned VLAN for the specified VF. When specified, all traffic
+sent from the VF will be tagged with the specified VLAN ID. Incoming traffic
+will be filtered for the specified VLAN ID, and will have all VLAN tags
+stripped before being passed to the VF. Setting this parameter to 0 disables
+VLAN tagging and filtering. The
+.B vf
+parameter must be specified.
+
+.sp
+.BI rate " TXRATE"
+- change the allowed transmit bandwidth, in Mbps, for the specified VF.
+Setting this parameter to 0 disables rate limiting. The
+.B vf
+parameter must be specified.
+.in -8
.PP
.B Warning:
^ permalink raw reply related [flat|nested] 4+ messages in thread