Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F109675532
D20626.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
9 KB
Referenced Files
None
Subscribers
None
D20626.diff
View Options
Index: head/usr.sbin/bhyve/Makefile
===================================================================
--- head/usr.sbin/bhyve/Makefile
+++ head/usr.sbin/bhyve/Makefile
@@ -32,6 +32,7 @@
mem.c \
mevent.c \
mptbl.c \
+ net_utils.c \
pci_ahci.c \
pci_e82545.c \
pci_emul.c \
Index: head/usr.sbin/bhyve/net_utils.h
===================================================================
--- head/usr.sbin/bhyve/net_utils.h
+++ head/usr.sbin/bhyve/net_utils.h
@@ -0,0 +1,37 @@
+/*-
+ * Copyright (c) 2019 Vincenzo Maffione <v.maffione@gmail.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _NET_UTILS_H_
+#define _NET_UTILS_H_
+
+#include <stdint.h>
+#include "pci_emul.h"
+
+void net_genmac(struct pci_devinst *pi, uint8_t *macaddr);
+int net_parsemac(char *mac_str, uint8_t *mac_addr);
+
+#endif /* _NET_UTILS_H_ */
Index: head/usr.sbin/bhyve/net_utils.c
===================================================================
--- head/usr.sbin/bhyve/net_utils.c
+++ head/usr.sbin/bhyve/net_utils.c
@@ -0,0 +1,83 @@
+/*-
+ * Copyright (c) 2011 NetApp, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#include "net_utils.h"
+#include "bhyverun.h"
+#include <md5.h>
+#include <net/ethernet.h>
+#include <string.h>
+#include <stdio.h>
+#include <errno.h>
+
+int
+net_parsemac(char *mac_str, uint8_t *mac_addr)
+{
+ struct ether_addr *ea;
+ char *tmpstr;
+ char zero_addr[ETHER_ADDR_LEN] = { 0, 0, 0, 0, 0, 0 };
+
+ tmpstr = strsep(&mac_str,"=");
+
+ if ((mac_str != NULL) && (!strcmp(tmpstr,"mac"))) {
+ ea = ether_aton(mac_str);
+
+ if (ea == NULL || ETHER_IS_MULTICAST(ea->octet) ||
+ memcmp(ea->octet, zero_addr, ETHER_ADDR_LEN) == 0) {
+ fprintf(stderr, "Invalid MAC %s\n", mac_str);
+ return (EINVAL);
+ } else
+ memcpy(mac_addr, ea->octet, ETHER_ADDR_LEN);
+ }
+
+ return (0);
+}
+
+void
+net_genmac(struct pci_devinst *pi, uint8_t *macaddr)
+{
+ /*
+ * The default MAC address is the standard NetApp OUI of 00-a0-98,
+ * followed by an MD5 of the PCI slot/func number and dev name
+ */
+ MD5_CTX mdctx;
+ unsigned char digest[16];
+ char nstr[80];
+
+ snprintf(nstr, sizeof(nstr), "%d-%d-%s", pi->pi_slot,
+ pi->pi_func, vmname);
+
+ MD5Init(&mdctx);
+ MD5Update(&mdctx, nstr, (unsigned int)strlen(nstr));
+ MD5Final(digest, &mdctx);
+
+ macaddr[0] = 0x00;
+ macaddr[1] = 0xa0;
+ macaddr[2] = 0x98;
+ macaddr[3] = digest[0];
+ macaddr[4] = digest[1];
+ macaddr[5] = digest[2];
+}
Index: head/usr.sbin/bhyve/pci_e82545.c
===================================================================
--- head/usr.sbin/bhyve/pci_e82545.c
+++ head/usr.sbin/bhyve/pci_e82545.c
@@ -65,6 +65,7 @@
#include "bhyverun.h"
#include "pci_emul.h"
#include "mevent.h"
+#include "net_utils.h"
/* Hardware/register definitions XXX: move some to common code. */
#define E82545_VENDOR_ID_INTEL 0x8086
@@ -2259,38 +2260,16 @@
}
static int
-e82545_parsemac(char *mac_str, uint8_t *mac_addr)
-{
- struct ether_addr *ea;
- char *tmpstr;
- char zero_addr[ETHER_ADDR_LEN] = { 0, 0, 0, 0, 0, 0 };
-
- tmpstr = strsep(&mac_str,"=");
- if ((mac_str != NULL) && (!strcmp(tmpstr,"mac"))) {
- ea = ether_aton(mac_str);
- if (ea == NULL || ETHER_IS_MULTICAST(ea->octet) ||
- memcmp(ea->octet, zero_addr, ETHER_ADDR_LEN) == 0) {
- fprintf(stderr, "Invalid MAC %s\n", mac_str);
- return (1);
- } else
- memcpy(mac_addr, ea->octet, ETHER_ADDR_LEN);
- }
- return (0);
-}
-
-static int
e82545_init(struct vmctx *ctx, struct pci_devinst *pi, char *opts)
{
- DPRINTF("Loading with options: %s\r\n", opts);
-
- MD5_CTX mdctx;
- unsigned char digest[16];
char nstr[80];
struct e82545_softc *sc;
char *devname;
char *vtopts;
int mac_provided;
+ DPRINTF("Loading with options: %s\r\n", opts);
+
/* Setup our softc */
sc = calloc(1, sizeof(*sc));
@@ -2340,7 +2319,7 @@
(void) strsep(&vtopts, ",");
if (vtopts != NULL) {
- err = e82545_parsemac(vtopts, sc->esc_mac.octet);
+ err = net_parsemac(vtopts, sc->esc_mac.octet);
if (err != 0) {
free(devname);
return (err);
@@ -2355,24 +2334,8 @@
free(devname);
}
- /*
- * The default MAC address is the standard NetApp OUI of 00-a0-98,
- * followed by an MD5 of the PCI slot/func number and dev name
- */
if (!mac_provided) {
- snprintf(nstr, sizeof(nstr), "%d-%d-%s", pi->pi_slot,
- pi->pi_func, vmname);
-
- MD5Init(&mdctx);
- MD5Update(&mdctx, nstr, strlen(nstr));
- MD5Final(digest, &mdctx);
-
- sc->esc_mac.octet[0] = 0x00;
- sc->esc_mac.octet[1] = 0xa0;
- sc->esc_mac.octet[2] = 0x98;
- sc->esc_mac.octet[3] = digest[0];
- sc->esc_mac.octet[4] = digest[1];
- sc->esc_mac.octet[5] = digest[2];
+ net_genmac(pi, sc->esc_mac.octet);
}
/* H/w initiated reset */
Index: head/usr.sbin/bhyve/pci_virtio_net.c
===================================================================
--- head/usr.sbin/bhyve/pci_virtio_net.c
+++ head/usr.sbin/bhyve/pci_virtio_net.c
@@ -67,6 +67,7 @@
#include "pci_emul.h"
#include "mevent.h"
#include "virtio.h"
+#include "net_utils.h"
#define VTNET_RINGSZ 1024
@@ -698,29 +699,6 @@
}
#endif
-static int
-pci_vtnet_parsemac(char *mac_str, uint8_t *mac_addr)
-{
- struct ether_addr *ea;
- char *tmpstr;
- char zero_addr[ETHER_ADDR_LEN] = { 0, 0, 0, 0, 0, 0 };
-
- tmpstr = strsep(&mac_str,"=");
-
- if ((mac_str != NULL) && (!strcmp(tmpstr,"mac"))) {
- ea = ether_aton(mac_str);
-
- if (ea == NULL || ETHER_IS_MULTICAST(ea->octet) ||
- memcmp(ea->octet, zero_addr, ETHER_ADDR_LEN) == 0) {
- fprintf(stderr, "Invalid MAC %s\n", mac_str);
- return (EINVAL);
- } else
- memcpy(mac_addr, ea->octet, ETHER_ADDR_LEN);
- }
-
- return (0);
-}
-
static void
pci_vtnet_tap_setup(struct pci_vtnet_softc *sc, char *devname)
{
@@ -795,9 +773,6 @@
static int
pci_vtnet_init(struct vmctx *ctx, struct pci_devinst *pi, char *opts)
{
- MD5_CTX mdctx;
- unsigned char digest[16];
- char nstr[80];
char tname[MAXCOMLEN + 1];
struct pci_vtnet_softc *sc;
char *devname;
@@ -834,7 +809,7 @@
(void) strsep(&vtopts, ",");
if (vtopts != NULL) {
- err = pci_vtnet_parsemac(vtopts, sc->vsc_config.mac);
+ err = net_parsemac(vtopts, sc->vsc_config.mac);
if (err != 0) {
free(devname);
return (err);
@@ -851,24 +826,8 @@
free(devname);
}
- /*
- * The default MAC address is the standard NetApp OUI of 00-a0-98,
- * followed by an MD5 of the PCI slot/func number and dev name
- */
if (!mac_provided) {
- snprintf(nstr, sizeof(nstr), "%d-%d-%s", pi->pi_slot,
- pi->pi_func, vmname);
-
- MD5Init(&mdctx);
- MD5Update(&mdctx, nstr, strlen(nstr));
- MD5Final(digest, &mdctx);
-
- sc->vsc_config.mac[0] = 0x00;
- sc->vsc_config.mac[1] = 0xa0;
- sc->vsc_config.mac[2] = 0x98;
- sc->vsc_config.mac[3] = digest[0];
- sc->vsc_config.mac[4] = digest[1];
- sc->vsc_config.mac[5] = digest[2];
+ net_genmac(pi, sc->vsc_config.mac);
}
/* initialize config space */
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Feb 9, 5:47 AM (16 h, 22 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16545280
Default Alt Text
D20626.diff (9 KB)
Attached To
Mode
D20626: bhyve: move common code to net_utils.c
Attached
Detach File
Event Timeline
Log In to Comment