refactored the IP address handling code

It is now split up much more cleanly, has less stuff running on the
cRIO, and doesn't do as much of the stuff with string manipulation.

Before, it was kind of ridicilous how many times the code converted IP
addresses back and forth between 32-bit ints and strings to do various
manipulations and pass them around. Also, there was various junk that
the cRIO code did that it did not need to be doing.
diff --git a/aos/common/network_port.h b/aos/common/network_port.h
new file mode 100644
index 0000000..a8f2d1d
--- /dev/null
+++ b/aos/common/network_port.h
@@ -0,0 +1,35 @@
+#ifndef AOS_COMMON_NETWORK_PORT_H_
+#define AOS_COMMON_NETWORK_PORT_H_
+
+#include "aos/aos_stdint.h"
+
+namespace aos {
+
+// Constants representing the various ports used for communications and some
+// documentation about what each is used for.
+enum class NetworkPort : uint16_t {
+  // UDP socket sending motor values from the atom to the crio.
+  kMotors = 9710,
+  // UDP socket forwarding drivers station packets from the crio to the atom.
+  kDS = 9711,
+  // UDP socket sending sensor values from the crio to the atom.
+  kSensors = 9712,
+  // TCP socket(s) (automatically reconnects) sending logs from the crio to the
+  // atom.
+  kLogs = 9713,
+  // HTTP server that sends out camera feeds in mjpg format.
+  // Should not be changed because this number shows up elsewhere too.
+  kCameraStreamer = 9714,
+};
+
+// Constants representing the various devices that talk on the network and the
+// last segment of their IP addresses.
+enum class NetworkAddress : uint8_t {
+  // The computer that the cRIO talks to.
+  kAtom = 179,
+  kCRIO = 2,
+};
+
+}  // namespace aos
+
+#endif  // AOS_COMMON_NETWORK_PORT_H_