Ben Pfaff [Thu, 24 Jul 2008 00:21:58 +0000 (17:21 -0700)]
Don't invoke Debconf from openflow-switch postinst.
This was in there because at one time it seemed desirable to configure
from the postinst, but that idea was abandoned. Now Debconf seems to
be screwing something up somehow, so we might as well not run it at all,
since it wasn't doing anything useful.
Ben Pfaff [Wed, 23 Jul 2008 23:42:05 +0000 (16:42 -0700)]
Fix kdist_clean target in debian/rules.
This fixes "module-assistant auto-install openflow-datapath" for
bootstrapping from a clean environment. (Use "m-a -f purge
openflow-datapath" to test that it works starting from an un-clean
environment.)
Ben Pfaff [Wed, 23 Jul 2008 21:53:06 +0000 (14:53 -0700)]
Only generate private key and certificate request if ssl enabled.
Generating them unconditionally caused a problem with the init script:
the script required there to be a certificate for the private key if
the private key existed, but we do want to allow TCP-only configurations
and always having a private key prevented that.
Also, give the user advice on how to deal with this problem when it
arises in the init script.
Ben Pfaff [Tue, 22 Jul 2008 20:26:03 +0000 (13:26 -0700)]
Add SIGALRM to blockable fatal signals.
We use SIGALRM to limit runtime of dpctl and ofp-discover. There is no
reason that we should not clean up after it in the same way as any other
catchable signal. In particular, ofp-discover wants to restore network
device flags on timeout.
Ben Pfaff [Tue, 22 Jul 2008 21:01:10 +0000 (14:01 -0700)]
dhcp: Make dhcp_msg_to_string() support a multiline format also.
The upcoming ofp-discover program wants to print out the binding
information, and dhcp_msg_to_string() is pretty close to what it
wants. But one-field-per-line is easier for other programs to parse.
Ben Pfaff [Tue, 22 Jul 2008 21:01:01 +0000 (14:01 -0700)]
dhcp: Break out netdev configuration from DHCP binding.
This allows us to have DHCP clients that don't actually bind or unbind
a network device's IP address. This is useful for doing controller
discovery without actually reconfiguring a network device.
Ben Pfaff [Tue, 22 Jul 2008 21:00:03 +0000 (14:00 -0700)]
dhcp: Be more precise about updating 'changed' flag.
There's no need to set changed unconditionally in dhclient_init(), and
it can make extra work for the users of the dhclient, by causing them
to think that something changed when it didn't.
Ben Pfaff [Mon, 21 Jul 2008 21:48:53 +0000 (14:48 -0700)]
Drop use of libtool for libraries.
libtool was needed when NOX was directly linking against libopenflow.
Since it doesn't do that anymore, we can drop its use (and that makes
OpenFlow configure and build slightly faster).
Ben Pfaff [Mon, 21 Jul 2008 21:37:21 +0000 (14:37 -0700)]
Only link programs that need it against OpenSSL.
This keeps vlogconf, in particular, from being linked against OpenSSL,
which in turn keeps the Debian package build tools from complaining that
the openflow-common package shouldn't need to depend on OpenSSL but does
because of the spurious library link.
Ben Pfaff [Mon, 21 Jul 2008 20:54:01 +0000 (13:54 -0700)]
Get rid of unnecessary synchronization in tables.
The table insert and delete functions are already fully serialized
on dp_mutex (and genl_mutex), so there's no need for them to use
additional spinlocks.
Ben Pfaff [Mon, 21 Jul 2008 18:22:28 +0000 (11:22 -0700)]
Properly synchronize dp_dev destruction.
Before, we didn't really synchronize this at all. Now, when we want
to destroy the ofX device, we stop the transmit path and wait for
in-progress transmissions to finish.
Ben Pfaff [Mon, 21 Jul 2008 20:59:10 +0000 (13:59 -0700)]
Simplify use of dp_mutex.
There was little point in taking the dp_mutex farther down in the
code than dp_genl_openflow, since that function is already completely
serialized by genl_rcv across the genl_mutex. We could get rid of
dp_mutex completely, except that we still need it to serialize timeout.
Ben Pfaff [Mon, 21 Jul 2008 20:26:37 +0000 (13:26 -0700)]
Get rid of useless use of rcu_read_lock.
These code paths are fully protected by the Generic Netlink genl_mutex,
which is taken by genl_rcv() that calls dp_genl_openflow(), so there is
no need for them to take the rcu_read_lock.
Ben Pfaff [Thu, 17 Jul 2008 18:58:15 +0000 (11:58 -0700)]
Use an IP ID of 0 for transmitted DHCP packets.
We can't guarantee uniqueness of ip_id versus the host's, screwing up
fragment reassembly, so prevent fragmentation and use an all-zeros
ip_id. RFC 791 doesn't say we can do this, but Linux does the same
thing for DF packets, so it must not screw anything up.
Ben Pfaff [Mon, 14 Jul 2008 20:56:39 +0000 (13:56 -0700)]
vconn: New function vconn_ssl_is_configured().
The secure channel, in discovery mode, wants to enable TCP connections
by default only if SSL has not been configured. This function allows
it to do that.
Ben Pfaff [Mon, 14 Jul 2008 20:34:14 +0000 (13:34 -0700)]
rconn: Time out connection attempts when the backoff deadline passes.
Otherwise, the TCP/IP implementation is responsible for connection
attempt backoff, but we want to have some control over it ourselves.
In particular we want to initially back off faster and to log a
message upon connection attempt retransmission, to make it easier
to see what has happened from the log.
Ben Pfaff [Thu, 17 Jul 2008 00:52:41 +0000 (17:52 -0700)]
By default, log to syslog also.
It seems that this should be useful for debugging post-mortems. Also,
this ensures that the "current time is negative" log message appears in
syslog. Otherwise, it won't ever, because we log it before the vlog
client has a chance to configure its log levels.
Ben Pfaff [Wed, 16 Jul 2008 18:14:23 +0000 (11:14 -0700)]
Fix behavior when system date is negative.
Previously we set a few timers to expire at a time_t of 0, i.e.
immediately. But if the system date is set incorrectly to a date
before 1970, then these timers will essentially never expire.
Set them to expire at TIME_MIN instead.
Ben Pfaff [Thu, 17 Jul 2008 00:01:03 +0000 (17:01 -0700)]
Answer ARP requests from controller directly in secchan.
With in-band control, it can happen that the controller needs to send
out an ARP request to find out the MAC address of the switch. These
packets are sent as broadcasts, so the secure channel will attempt to
send them back to the controller as ofp_packet_in messages. Of course,
that won't work, because the controller won't be able to respond to
the ofp_packet_in (because it needs the MAC address of the switch to
do so).
This commit makes the secure channel recognize broadcast ARP packets
that originate from the controller and flood them without passing them
back up to the controller.
Ben Pfaff [Wed, 16 Jul 2008 19:55:18 +0000 (12:55 -0700)]
New function netdev_arp_lookup().
The secchan needs to handle ARP requests from the controller itself, so
it has to translate the controller's IP address into a MAC address to
allow it to match those packets on dl_src. (OpenFlow doesn't allow us
to look into ARP packets and match on the encapsulated IP addresses, so
this is the best we can do.)