Ben Pfaff [Thu, 26 Jun 2008 23:21:18 +0000 (16:21 -0700)]
Modified the naming scheme for hardware tables.
Because of historical string munging during the kernel build process
if you named your hardware table hwtable-something, when it was built
the filename would look appropriate, but the actual module info would change
the internal name to be hwtable_something, thus after an insmod with the filename
you could not perform an rmmod with the same filename. As a result
the naming scheme has been changed to hwtable_NAME, NAME being the hardware
the table supports.
Further, include files in the hardware table should be prefixed with the
folder name, e.g. #include "hwtable_NAME/my_header.h".
Based on commits from David Erickson <derickso@stanford.edu>.
Ben Pfaff [Thu, 26 Jun 2008 18:52:36 +0000 (11:52 -0700)]
Don't special-case broadcast packets in in-band mode.
Before, in in-band mode, the secure channel would flood all flows
destined for the broadcast destination when not connected to a
controller. The rationale was that this allowed for ARP replies
to be forwarded to the local port, so that the secure channel
could obtain the Ethernet address of the controller. But this
is a false rationale: ARP replies are unicast to the requester,
not broadcast. (Frames unicast to the local port are always handled
by the secure channel.)
Also, even if it were a correct rationale, it would not help in
at least one case: if the controller's Ethernet address has expired
from the ARP cache, but the secure channel's TCP connection to
the controller is still connected, then the secure channel attempt
to ARP would fail, since the broadcast ARP reply would not be
handled by the secure channel (since the secure channel thought
that it was still connected).
Justin Pettit [Thu, 26 Jun 2008 18:48:31 +0000 (11:48 -0700)]
Fix extraction of flow data from match structure.
This brings the user-space switch in-line with fixes that were previously
made to the kernel one. The main problem was that when wildcards are used
some of the fields that follow should also be wildcarded.
Justin Pettit [Thu, 26 Jun 2008 06:22:39 +0000 (23:22 -0700)]
Fix VLAN modification action in kernel switch.
A number of errors were uncovered when we actually tried playing with VLAN tags on real traffic. This fixes endian, sk_buff, and other issues. Unrelated to VLAN tagging, this also protects some printk calls with net_ratelimit.
Ben Pfaff [Mon, 23 Jun 2008 21:08:37 +0000 (14:08 -0700)]
Drop "send_openflow_skb: send failed: -3" warning.
This message appeared in the normal course of OpenFlow usage when
a packet arrived on an OpenFlow interface and no secure channel
was running, or if packets arrived too fast for the secure channel
to process them. It confused more people than it assisted, so drop
it.
Ben Pfaff [Fri, 13 Jun 2008 17:19:46 +0000 (10:19 -0700)]
Make flow specifications more general in dpctl:
- More special port names.
- Allow fields to be comma-separated, for use on command line.
- Allow ANY as a synonym for *, to avoid globbing on command line.
Justin Pettit [Fri, 13 Jun 2008 03:07:11 +0000 (20:07 -0700)]
Fix identification of SNAP packets.
The result of the memcmp that checks whether the OUI is all zeroes was the reverse of what it should have been. This checkin also removes the masking of the least signficant bit from SAP checks, since it's not need for checking SNAP.
Ben Pfaff [Wed, 21 May 2008 21:11:59 +0000 (14:11 -0700)]
New functions for getting and setting network device flags.
This allows us to open network devices without bringing them up
and setting them for promiscuous mode, which will be useful in the
secchan for in-band communication.
Ben Pfaff [Wed, 21 May 2008 17:49:02 +0000 (10:49 -0700)]
Demote warning about runt frames to debug message.
This message is not too useful since there are various legitimate
ways that we can end up with runt frames, e.g. frames that only
ever passed through virtual network devices and never touched a
physical Ethernet.
Ben Pfaff [Wed, 28 May 2008 00:42:16 +0000 (17:42 -0700)]
Don't ever send frames on OpenFlow devices to the host stack.
On Linux 2.6 only, we would send frames received on OpenFlow devices to
the host TCP/IP stack if the dest Ethernet address matched the device's
Ethernet address (or under some other conditions). This caused confusion
when the host stack was configured for forwarding, because received IP
packets would be forwarded to other interfaces with IP addresses even if
the device on which they were received was configured with no IP address.
(This was discovered by Murphy. Thanks Murphy!)
This change drops this "feature". A more or less equivalent feature that
may be less prone to confusion and which works on any kernel version will
be added in a future commit via the of%d device.
This also allowed factoring out common code from the bridge hooks.
Justin Pettit [Fri, 9 May 2008 18:22:45 +0000 (11:22 -0700)]
Zero-out invalid fields when extracting a "match" and transforming it into a "flow".
When the controller wishes to add a flow entry to the switch, it sends a request with a description of matching flows in a "match". The switch was adding these exactly as described into the flow tables. However, when packets arrived, all invalid fields (e.g., the TCP/UDP ports in a non-TCP/UDP packet) are set to zero. If the rule being added by the controller had not set these invalid fields to zero, the packets would never match. We now zero out these fields when extracing a "match".
Ben Pfaff [Wed, 7 May 2008 22:21:30 +0000 (15:21 -0700)]
Treat flows without any wildcards as maximum priority.
Otherwise, we give the table implementations the opportunity to screw up
by distinguishing between two flows without wildcards but with apparently
different priorities that are required to be treated as the same priority.
Ben Pfaff [Mon, 5 May 2008 19:08:00 +0000 (12:08 -0700)]
Fix compilation on Linux 2.6.20: declare NLMSG_DEFAULT_SIZE with this kernel.
NLMSG_DEFAULT_SIZE was introduced in 2.6.20-rc1 in commit 339bf98ff,
"[NETLINK]: Do precise netlink message allocations where possible", but
we only defined it for kernels 2.6.18 and earlier. This change fixes
up the discrepancy.
Ben Pfaff [Mon, 5 May 2008 18:14:02 +0000 (11:14 -0700)]
Compile fix for Linux 2.6.26-rc1: don't use the removed list_for_each_safe_rcu macro.
There is no need for a "safe" version of the RCU list iteration macros,
because the ordinary version of the macros is "safe". Linux 2.6.26-rc1
removed these "safe" versions, so this change modifies OpenFlow's uses
of these macros to use the ordinary versions. This also simplifies the
code because we don't need to use the list_entry macros any longer.
Ben Pfaff [Fri, 2 May 2008 22:51:08 +0000 (15:51 -0700)]
Reduce spurious recompilations for Linux 2.4 datapath.
We need object files to depend on the build directories, so that the
build directories get created before we try to output files into them.
But making them depend directly on the build directories means that
whenever a build directory changes (including any change to the set of
files inside it) all the source files get recompiled. So, instead, make
them depend on dummy files inside the directories, which will only get
modified if someone does it intentionally.
Ben Pfaff [Fri, 2 May 2008 18:37:04 +0000 (11:37 -0700)]
Remove MAX_ACTIONS (which was 16) as a limit on the number of actions in a flow table entry.
Now the number of actions is limited, as a practical matter, to the size
of the buffer that the kernel provides for Netlink dumps, which is usually
4096 bytes. A flow statistics entry must fit in a single one of these
buffers. Actions are 8 bytes each, so this is about 500 actions
considering overhead.