components/openvswitch/patches/02-bridge.patch
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--
Close of build 117.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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"