author | Mike Sullivan <Mike.Sullivan@Oracle.COM> |
Thu, 26 Jan 2017 16:44:14 -0800 | |
changeset 7617 | 14b1a4293086 |
parent 7483 | 6df03be76e8c |
permissions | -rw-r--r-- |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
1 |
This patch includes Solaris bridge specific changes to OVS. |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
2 |
|
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
3 |
This patch has not been proposed upstream because we are not yet |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
4 |
proposing Solaris specific requirements upstream. |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
5 |
|
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
6 |
diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c |
5730
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
7 |
index 6cd30b8..67120d4 100644 |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
8 |
--- a/vswitchd/bridge.c |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
9 |
+++ b/vswitchd/bridge.c |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
10 |
@@ -943,6 +943,12 @@ port_configure(struct port *port) |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
11 |
free(s.lacp_slaves); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
12 |
} |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
13 |
|
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
14 |
+static boolean_t |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
15 |
+bridge_is_system(const struct bridge *br) |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
16 |
+{ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
17 |
+ return (strcmp(br->type, "system") == 0); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
18 |
+} |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
19 |
+ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
20 |
/* Pick local port hardware address and datapath ID for 'br'. */ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
21 |
static void |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
22 |
bridge_configure_datapath_id(struct bridge *br) |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
23 |
@@ -954,6 +960,14 @@ bridge_configure_datapath_id(struct bridge *br) |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
24 |
char *dpid_string; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
25 |
|
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
26 |
bridge_pick_local_hw_addr(br, ea, &hw_addr_iface); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
27 |
+#ifdef __sun |
5730
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
28 |
+ /* Solaris "system" bridges are implicitly created VNICs. They |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
29 |
+ * already have their ethernet addresses set, so there is no |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
30 |
+ * reason to set them. We prefer that they be "auto" generated. |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
31 |
+ */ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
32 |
+ if (bridge_is_system(br)) |
5730
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
33 |
+ goto skip; |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
34 |
+#endif |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
35 |
local_iface = iface_from_ofp_port(br, OFPP_LOCAL); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
36 |
if (local_iface) { |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
37 |
int error = netdev_set_etheraddr(local_iface->netdev, ea); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
38 |
@@ -964,6 +978,9 @@ bridge_configure_datapath_id(struct bridge *br) |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
39 |
br->name, ovs_strerror(error)); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
40 |
} |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
41 |
} |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
42 |
+#ifdef __sun |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
43 |
+skip: |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
44 |
+#endif |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
45 |
memcpy(br->ea, ea, ETH_ADDR_LEN); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
46 |
|
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
47 |
dpid = bridge_pick_datapath_id(br, ea, hw_addr_iface); |
5730
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
48 |
@@ -1485,6 +1502,19 @@ iface_do_create(const struct bridge *br, |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
49 |
goto error; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
50 |
} |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
51 |
|
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
52 |
+#ifdef __sun |
5730
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
53 |
+ if (bridge_is_system(br)) { |
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
54 |
+ if (netdev_is_uplink(netdev)) { |
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
55 |
+ VLOG_INFO("bridge %s: uplink %s", br->name, iface_cfg->name); |
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
56 |
+ error = netdev_configure_uplink(netdev, br->name); |
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
57 |
+ if (error) { |
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
58 |
+ goto error; |
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
59 |
+ } |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
60 |
+ } |
5730
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
61 |
+ netdev_add_port_to_bridge_mapping(netdev, br->name); |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
62 |
+ } |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
63 |
+#endif |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
64 |
+ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
65 |
*ofp_portp = iface_pick_ofport(iface_cfg); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
66 |
error = ofproto_port_add(br->ofproto, netdev, ofp_portp); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
67 |
if (error) { |
5730
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
68 |
@@ -1620,10 +1650,32 @@ find_local_hw_addr(const struct bridge *br, uint8_t ea[ETH_ADDR_LEN], |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
69 |
{ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
70 |
struct hmapx mirror_output_ports; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
71 |
struct port *port; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
72 |
+ struct iface *iface = NULL; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
73 |
+ uint8_t iface_ea[ETH_ADDR_LEN]; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
74 |
bool found_addr = false; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
75 |
int error; |
5730
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
76 |
int i; |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
77 |
|
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
78 |
+#ifdef __sun |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
79 |
+ /* |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
80 |
+ * Solaris does not currently support fake bridges. |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
81 |
+ */ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
82 |
+ if (bridge_is_system(br)) { |
5730
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
83 |
+ if (fake_br == NULL) { |
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
84 |
+ iface = iface_lookup(br, br->name); |
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
85 |
+ if (iface != NULL) { |
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
86 |
+ error = netdev_get_etheraddr(iface->netdev, iface_ea); |
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
87 |
+ if (error == 0) { |
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
88 |
+ memcpy(ea, iface_ea, ETH_ADDR_LEN); |
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
89 |
+ *hw_addr_iface = iface; |
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
90 |
+ found_addr = true; |
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
91 |
+ } |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
92 |
+ } |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
93 |
+ } |
5730
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
94 |
+ goto skip; |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
95 |
+ } |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
96 |
+#endif |
5730
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
97 |
+ |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
98 |
/* Mirror output ports don't participate in picking the local hardware |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
99 |
* address. ofproto can't help us find out whether a given port is a |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
100 |
* mirror output because we haven't configured mirrors yet, so we need to |
5730
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
101 |
@@ -1639,9 +1691,7 @@ find_local_hw_addr(const struct bridge *br, uint8_t ea[ETH_ADDR_LEN], |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
102 |
/* Otherwise choose the minimum non-local MAC address among all of the |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
103 |
* interfaces. */ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
104 |
HMAP_FOR_EACH (port, hmap_node, &br->ports) { |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
105 |
- uint8_t iface_ea[ETH_ADDR_LEN]; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
106 |
struct iface *candidate; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
107 |
- struct iface *iface; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
108 |
|
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
109 |
/* Mirror output ports don't participate. */ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
110 |
if (hmapx_contains(&mirror_output_ports, port->cfg)) { |
5730
cca4aa297e68
22590644 OpenvSwitch should be updated to version 2.3.2
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
5090
diff
changeset
|
111 |
@@ -1708,13 +1758,15 @@ find_local_hw_addr(const struct bridge *br, uint8_t ea[ETH_ADDR_LEN], |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
112 |
found_addr = true; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
113 |
} |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
114 |
} |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
115 |
+ hmapx_destroy(&mirror_output_ports); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
116 |
+#ifdef __sun |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
117 |
+skip: |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
118 |
+#endif |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
119 |
|
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
120 |
if (!found_addr) { |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
121 |
memcpy(ea, br->default_ea, ETH_ADDR_LEN); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
122 |
*hw_addr_iface = NULL; |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
123 |
} |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
124 |
- |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
125 |
- hmapx_destroy(&mirror_output_ports); |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
126 |
} |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
127 |
|
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
128 |
static void |
7483
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
129 |
diff --git a/vswitchd/ovs-vswitchd.c b/vswitchd/ovs-vswitchd.c |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
130 |
index 3c843e1..a49f41e 100644 |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
131 |
--- a/vswitchd/ovs-vswitchd.c |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
132 |
+++ b/vswitchd/ovs-vswitchd.c |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
133 |
@@ -61,6 +61,27 @@ static unixctl_cb_func ovs_vswitchd_exit; |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
134 |
static char *parse_options(int argc, char *argv[], char **unixctl_path); |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
135 |
static void usage(void) NO_RETURN; |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
136 |
|
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
137 |
+#ifdef __sun |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
138 |
+static void |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
139 |
+setfdlimit(void) |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
140 |
+{ |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
141 |
+ struct rlimit rlimit; |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
142 |
+ rlim_t cur; |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
143 |
+ |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
144 |
+ if (getrlimit(RLIMIT_NOFILE, &rlimit) < 0) { |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
145 |
+ VLOG_ERR("getting the max fd limit failed so we are not able to " |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
146 |
+ "increase the current fd limit to max: %s", ovs_strerror(errno)); |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
147 |
+ return; |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
148 |
+ } |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
149 |
+ |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
150 |
+ cur = rlimit.rlim_cur; |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
151 |
+ rlimit.rlim_cur = rlimit.rlim_max; |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
152 |
+ if (setrlimit(RLIMIT_NOFILE, &rlimit) < 0) |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
153 |
+ VLOG_ERR("setting the # fds to %lu failed, proceeding with %lu as the " |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
154 |
+ "limit: %s", rlimit.rlim_max, cur, ovs_strerror(errno)); |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
155 |
+} |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
156 |
+#endif |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
157 |
+ |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
158 |
int |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
159 |
main(int argc, char *argv[]) |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
160 |
{ |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
161 |
@@ -93,6 +114,10 @@ main(int argc, char *argv[]) |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
162 |
#endif |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
163 |
} |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
164 |
|
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
165 |
+#ifdef __sun |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
166 |
+ setfdlimit(); |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
167 |
+#endif |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
168 |
+ |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
169 |
retval = unixctl_server_create(unixctl_path, &unixctl); |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
170 |
if (retval) { |
6df03be76e8c
24977791 "Too many open files" issue with ovs-vswitchd on larger systems
Cathy Zhou <Cathy.Zhou@Oracle.COM>
parents:
5730
diff
changeset
|
171 |
exit(EXIT_FAILURE); |
5090
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
172 |
diff --git a/vswitchd/system-stats.c b/vswitchd/system-stats.c |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
173 |
index 7789787..cee0255 100644 |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
174 |
--- a/vswitchd/system-stats.c |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
175 |
+++ b/vswitchd/system-stats.c |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
176 |
@@ -29,6 +29,9 @@ |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
177 |
#if HAVE_SYS_STATVFS_H |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
178 |
#include <sys/statvfs.h> |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
179 |
#endif |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
180 |
+#ifdef __sun |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
181 |
+#include <sys/loadavg.h> |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
182 |
+#endif |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
183 |
#include <unistd.h> |
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
184 |
|
5f131162e136
PSARC/2015/311 Open vSwitch (OVS)
Mark Haywood <Mark.Haywood@Oracle.COM>
parents:
diff
changeset
|
185 |
#include "daemon.h" |