2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-31 14:25:26 +00:00
Commit Graph

1135 Commits

Author SHA1 Message Date
Ben Pfaff
d3d22744a7 vswitch: Avoid knowledge of details specific to Linux datapaths.
At startup, the vswitch needs to delete datapaths that are not configured
by the administrator.  Until now this was done by knowing the possible
names of Linux datapaths.  This commit cleans up by allowing each
datapath class to enumerate its existing datapaths and their names.
2009-07-06 11:06:36 -07:00
Ben Pfaff
632d136c7b vswitch: Remove restriction on datapath names.
Commit f4b96c92c "vswitch: Disallow bridges named "dpN" or "nl:N"" disabled
naming bridges "dpN" because the vswitchd code made the bad assumption that
the bridge's local port has the same name as the bridge, which was not
true (at the time) for bridges named dpN.  Now that assumption has been
eliminated, so this commit eliminates the restriction too.

This change is also a cleanup in that it eliminates one form of the
vswitch's dependence on specifics of the dpif implementation.
2009-07-06 10:17:54 -07:00
Ben Pfaff
72865317a4 New implementation of userspace datapath, based on the netdev library. 2009-07-06 09:55:06 -07:00
Ben Pfaff
5792c5c64a dpif: Add new functions dp_run() and dp_wait().
The upcoming netdev-based dpif needs a hook where it can process packets
and throw them against the flow table, and this provides a suitable place.
2009-07-06 09:07:24 -07:00
Ben Pfaff
9ee3ae3e0d datapath: Make the datapath responsible for choosing port numbers.
Soon we will allow for multiple datapath implementations.  By allowing
the datapath to choose the port numbers, we possibly simplify some datapath
implementations, and the datapath's clients don't have to guess (or to
check) what port numbers are free, so this seems like a better way to go.
2009-07-06 09:07:24 -07:00
Ben Pfaff
f7ef6533d8 dpif: Remove obsolete support for datapaths whose names begin with "nl:".
The use of "nl:" as a prefix for datapath names has been deprecated for
months.  That should be long enough for users to update their scripts.
2009-07-06 09:07:24 -07:00
Ben Pfaff
c228a3649a dpif: Hide the contents of struct dpif.
This helps prepare for multiple dpif implementations, and ensures that
code outside dpif.c does not depend on its internals.
2009-07-06 09:07:23 -07:00
Ben Pfaff
b29ba12809 dpif: Replace dpif_id() by dpif_name().
dpif_id() is often used in error messages, e.g. "dp%u: screwed up".  But
soon we will be generalizing the concept of a datapath, so it is better
to have a function that returns a full name, e.g. "%s: screwed up".
Accordingly, this commit replaces dpif_id() by a new function dpif_name()
that does so.
2009-07-06 09:07:23 -07:00
Ben Pfaff
53a4218dca dpif: New function dpif_get_netflow_ids().
The 'minor' member of struct dpif is used for two different purposes:
for printing in log messages and for encapsulating in NetFlow messages.
The needs in each case are different, so we should break up these uses.
This commit does half of that, by introducing a new function to retrieve
NetFlow ids and using it where appropriate.
2009-07-06 09:07:23 -07:00
Ben Pfaff
335562c0b9 dpif: Rename dpif_get_name() to dpif_port_get_name(), update interface.
With multiple kinds of datapaths, code should not just use
"dp%u" along with dpif_minor() to print a datapath name, because not all
datapaths can sensibly be named that way.  We want to use a function
with a name like dpif_get_name() to retrieve a datapath name for printing
to the user, in which case the existing dpif_get_name() function would be
confusing.  So rename the existing one to something more explicit.
2009-07-06 09:07:23 -07:00
Justin Pettit
a1525581ae vswitchd: Enable updating resolv.conf by default when using discovery
When vSwitch does discovery, it is supposed to update resolv.conf by
default.  The way configuration parameters were being read, it would
disable this update by default.
2009-07-01 13:58:19 -07:00
Justin Pettit
e3fdfed11b Merge commit 'origin/citrix' 2009-07-01 11:31:37 -07:00
Justin Pettit
952efc486d vswitch: Set minimum probe interval to 5 seconds
In vSwitch, the minimum probe interval is supposed to be 5 seconds, but
that was not enforced.  If no interval was specified in the config file,
a value of 0 was being used, which would cause probes to never be sent
and the rconn not to move out of its ACTIVE state.

Possible fix to Bug #1466.
2009-06-30 15:24:54 -07:00
Justin Pettit
7e40e21d8f xenserver: Remove cacert when user reconfigures the controller
If a user moves from one controller to another, we did not remove the
cacert.  This prevents the switch from connecting to the new controller.
To ease confusion, we now delete the cacert when the user changes or
removes the controller in xsconsole.

Note: This commit has a minor security issue, since we do not remove
trust for the old certificate until the switch is restarted.  In
general, users should only be connected to trusted servers, so the
impact should be low.  Fixes this would require larger changes to the
vconn-ssl code, which we don't want to do so late in the release cycle.

Bug #1457
2009-06-26 12:39:50 -07:00
Justin Pettit
7c77c24dbd vswitchd: Adding and removing mgmt interface breaks connection
When a managment connection is configured and then removed, putting it
back causes the management connection to never be reestablished.  The
management code checks whether the configuration file has changed before
it attempts to reconfigure itself.  If the only thing that changed was
the lack of a management connection, then it tore down the connection
but didn't update its view of the configuration.  When the same
manager IP is configured, the cached version matches the new version, so
no changes are made.  This commit clears the cached version, so that a
removing and then adding the manager will be detected as a change.

Bug #1448
2009-06-24 18:03:44 -07:00
Justin Pettit
f30f26bef4 Remove references to Open vSwitch being a "virtual" switch
The Open vSwitch system is not limted to being a virtual switch.  This
commit removes these references.  We are now a "versatile" switch!
2009-06-23 14:18:43 -07:00
Ben Pfaff
f06b2aa9dd ovs-brcompatd: Turn up log level of port removal messages.
These messages proved useful during debugging, and they should not be too
common, so log them at a higher level.
2009-06-23 11:02:30 -07:00
Ben Pfaff
385533816c ovs-brcompatd: Handle XS Tools 5.0.0 destroying and recreating devices
XenServer Tools version 5.0.0 destroys and recreates network devices with
the same name on boot of (at least) Windows VMs.  We had a race such that
ovs-brcompatd would delete the new device from the vswitchd configuration
file (not the old one).  This commit fixes that problem.

Bug #1429.
2009-06-23 11:00:43 -07:00
Justin Pettit
23834de273 vswitchd: Reduce number of calls to reconfigure() during mgmt updates
When we receive an OpenFlow management protocol Config Update, we
immediately force the switch to reconfigure itself.  This is
functionally correct, but it can cause long delays before return control
back to the switch.  We now keep track of whether there were any changes
and then only force a reconfigure once per management run.
2009-06-19 17:41:42 -07:00
Ben Pfaff
34e63086ed Merge changes from citrix branch into master. 2009-06-15 16:04:54 -07:00
Ben Pfaff
5eccf35939 Replace SHA-1 library with one that is clearly licensed.
The SHA-1 library that we used until now was taken from RFC 3174.  That
library has no clearly free license statement, only a license on the text
of the RFC.  This commit replaces this library with a modified version of
the code from the Apache Portable Runtime library from apr.apache.org,
which is licensed under the Apache 2.0 license, the same as the rest of
Open vSwitch.
2009-06-15 16:03:28 -07:00
Ben Pfaff
a14bc59fb8 Update primary code license to Apache 2.0. 2009-06-15 15:11:30 -07:00
Ben Pfaff
e2ead27a72 vswitch: Avoid segfault when revalidating ARP flows.
The 'packet' argument to process_flow() is allowed to be null, but some of
the code was assuming that it was always non-null, which caused a segfault
while revalidating ARP flows.

Bug #1394.
2009-06-15 13:07:25 -07:00
Ben Pfaff
78ff02708b vconn: Factor out common code from TCP and SSL vconns.
The TCP and SSL vconn implementations had a lot of common code to make
and accept TCP connections, which this commit factors out into common
functions in socket-util.c.

Also adds the ability to bind ptcp and pssl vconns to a particular IP
address instead of the wildcard address.
2009-06-12 17:05:51 -07:00
Ben Pfaff
12fb742b6f Don't accept unix: connections, etc. in OpenFlow controller discovery.
The controller discovery code has always had the capability to whitelist
only certain types of controller locations.  Until now, we have only taken
advantage of this when SSL is enabled (so that all OpenFlow connections are
authenticated with SSL if SSL is configured).

However, it occurs to me that making the section of connections entirely
unrestricted is too permissive.  An attacker could make the vswitch connect
to an arbitrary Unix domain socket, for example.  I don't have a
description of how this is an exploitable security vulnerability, but it
seems entirely too lax.

So: this commit changes the default to allowing only TCP connections to
controller in the non-SSL case.
2009-06-11 13:02:33 -07:00
Justin Pettit
a8d211487e vswitch: Add support for large OFMP messages
OpenFlow uses a 16-bit field to describe the message length, which
limits messages to a maximum 65535 bytes.  Some of the messages passed
by the management protocol may be larger than this, so a general
Extended Data message has been added to management protocol.  It
encapsulates a single giant OpenFlow-like message, and breaks it into
however many vaild smaller ones are required.
2009-06-11 01:58:52 -07:00
Justin Pettit
2f14f69319 vswitch: Fix memory leak when OFMP resource updates are sent
When a resource update message is generated by vSwitch, it creates a
couple of svec objects that need to be explicitly destroyed.  This
wasn't happening, so memory would leak after each resource update.  This
commit properly destroys them after use.
2009-06-10 17:10:54 -07:00
Ben Pfaff
c93b1d6a4c vswitch: Fix handling of multicast packets received by bonds.
As long as bonding has been implemented, the vswitch has refused to learn
from multicast packets that arrive on a bond slave if it has already
learned any other port for that source MAC, because it is likely that we
sent the packet out ourselves and are only now receiving a copy of it on
our active slave.

This is entirely correct, but it does not go far enough.  In fact, the
bridge needs to entirely drop such packets.  Otherwise, a host whose MAC
is assigned to a slave other than the active slave will receive a second
copy of multicast packets that it sends out the bond, and other ports
will receive two copies of every multicast packet sent by such a host.

This commit implements this new policy, which simplifies the code at the
same time.

Bug #1387.
2009-06-10 15:31:20 -07:00
Ben Pfaff
da285df4bf vswitch: Add ovs-appctl commands for debugging and managing bonds. 2009-06-10 15:31:20 -07:00
Justin Pettit
d798447957 vswitch: Clarify what "ingress" means in policing
The man page for ovs-vswitchd.conf explains how ingress policing works.
However, what "ingress" means is a bit confusing depending on the
perspective.  For vSwitch, it's from the switch's perspective.  This
means on a PIF, it's the rate traffic comes into the box.  On a VIF,
it's the rate traffic can be *transmitted* from a VM.  This commit
clarifies the man page a bit.

Thanks to Johan for pointing out the problem.
2009-06-09 23:32:30 -07:00
Justin Pettit
3570ee9844 xenserver: Send VIF details to controller
The controller needs to know various things about virtual interfaces as
they move about the network.  This commit sends the VIF, virtual
machine, and network UUIDs associated with the VIF, as well as its MAC
address over the management channel.

Feature #1324
2009-06-09 18:22:24 -07:00
Ben Pfaff
2303f3b2fc vswitch: Send gratuitous learning packets when bond slaves go down.
When a bond slave goes down, all of the MACs that were on it are migrated
to another slave, but this is not apparent to the switch that the bond is
connected to until each MAC sends out a packet.  This causes incoming
traffic for a given MAC to be dropped until the MAC sends out a packet.
This is not usually a problem, because traffic is not ordinarily one-way,
and we can't avoid losing some packets in some cases, but we can do a
little better by sending out a gratuitous learning packet on the new slave
as soon as we know about it, and that is what this commit implements.

Bug #1290.
2009-06-08 12:26:27 -07:00
Ben Pfaff
c2633c26a1 vswitch: Enable bond slaves based on carrier status, not up/down.
Whether a bond slave is enabled should be based on whether the device's
PHY sees carrier, not based on whether the device is configured up or down.
(Note that a device that is configured down will always see "no carrier").
Otherwise a device that is up but has no carrier will initially be enabled,
which does not make sense.

This has no effect on interfaces that are not bond slaves, because the
"enabled" setting is used only by bond slaves.

Bug #1247.
2009-06-05 14:28:39 -07:00
Justin Pettit
6ae36700df vswitch: Send Xen UUIDs associated with system and networks
This commit sends information about Xen UUIDs to the controller through
the management connection.  Specifically, it sends the XenServer UUID
and a list of network UUIDs associated with each datapath.
2009-06-05 12:13:37 -07:00
Ben Pfaff
064af42167 Import from old repository commit 61ef2b42a9c4ba8e1600f15bb0236765edc2ad45. 2009-07-08 13:19:16 -07:00