Diagnostics - traceroute and ping support

A diagnostic packet is a packet that is injected by agent to accomplish
two main functionalities (for now) - reachability (ping) and path
information (traceroute), given the five tuple (sip,sport,dip,dport,proto).

While injecting the packet, agent explicitly marks the packet as a
diagnostic packet. If the packet transits a compute node, at the
receiving compute, the transport header checksum is used to identify
whether the packet is a diagnostic packet or not.

Ping, thus is straight forward

For traceroute to work, vrouter needs to decrement ttl and send icmp
time to live exceeded message. Every packet that vrouter forwards,
vrouter decerements the ttl and if the ttl goes to zero trap the packet
to agent, which processes the message and sends an icmp ttl exceeded
message. For a diagnostic packet, the inner network header ttl is
also copied onto outer network header so that the fabric routers
do send a ttl exceeded message and thus a map of the underlay is known.

Partial-BUG: #1379622
Change-Id: Idb785a6c25ee02578ee90254a0d6dd137a0eb6d6
Fix return code check

The current code reads:

   if ((ret = vr_fragment_table_init(vrouter) < 0))

The check is performed correctly, but since the "<" comparison takes
precedence, ret is now 1, which confuses the module loader into thinking
everything worked out.

Move the parentheses to fix this issue.

Change-Id: I1278cebbdcebe2aec445d491fa471f6f4ebcc8ba
Return ENOMEM when failing to allocate memory

When vr_btable_alloc fails, it should get reported back up the call
stack as ENOMEM, not EINVAL. This is also what happens in vr_flow.

Change-Id: I250b272c4274904cadb2c1e9a6dc92fc6bc4c7b5
Merging commit
add printfs in vhost_tx()
better printf in freebsd_if_get_encap();
rewrite freebsd_if_get_encap()
fix in freebsd_if_get_encap()
fix in freebsd_if_get_encap()