From: Patrick Mullaney <pmullaney@xxxxxxxxxx> Signed-off-by: Patrick Mullaney <pmullaney@xxxxxxxxxx> Signed-off-by: Gregory Haskins <ghaskins@xxxxxxxxxx> --- drivers/vbus/devices/venet-tap.c | 35 ++++++++++++++++++++++++++++++++++- 1 files changed, 34 insertions(+), 1 deletions(-) diff --git a/drivers/vbus/devices/venet-tap.c b/drivers/vbus/devices/venet-tap.c index 5e093a0..33ede4c 100644 --- a/drivers/vbus/devices/venet-tap.c +++ b/drivers/vbus/devices/venet-tap.c @@ -1214,6 +1214,39 @@ host_mac_show(struct vbus_device *dev, struct vbus_device_attribute *attr, static struct vbus_device_attribute attr_hmac = __ATTR_RO(host_mac); + +static ssize_t +cmac_store(struct vbus_device *dev, struct vbus_device_attribute *attr, + const char *buf, size_t count) +{ + struct venettap *priv = vdev_to_priv(dev); + const char *pbuf = buf; + unsigned int uc; + int i; + + /* + * Format 00:11:22:33:44:55 + */ + if (count != 18) + return -EINVAL; + + for (i = 2; i < 17; i += 3) { + if (pbuf[i] != ':') + return -EINVAL; + } + + if (priv->vbus.opened) + return -EINVAL; + + for (i = 0; i < ETH_ALEN; i++) { + sscanf(pbuf, "%x", &uc); + pbuf = pbuf + 3; + priv->cmac[i] = (u8)uc; + } + + return count; +} + static ssize_t client_mac_show(struct vbus_device *dev, struct vbus_device_attribute *attr, char *buf) @@ -1224,7 +1257,7 @@ client_mac_show(struct vbus_device *dev, struct vbus_device_attribute *attr, } static struct vbus_device_attribute attr_cmac = - __ATTR_RO(client_mac); + __ATTR(client_mac, S_IRUGO | S_IWUSR, client_mac_show, cmac_store); static ssize_t enabled_show(struct vbus_device *dev, struct vbus_device_attribute *attr, -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html