summaryrefslogtreecommitdiffstats
path: root/src/vnet/ip/punt.md
diff options
context:
space:
mode:
authorNeale Ranns <nranns@cisco.com>2019-05-15 02:13:37 -0700
committerOle Trøan <otroan@employees.org>2019-05-28 13:30:44 +0000
commit50f0ac0f097e5495da1f2b1816106e3d420ff34b (patch)
treed10ae0385fc10b7da97b2a24f8dea3882f6d702d /src/vnet/ip/punt.md
parent9080096f7c548415fc4d5354c7e582a3eda1a5ed (diff)
Punt: socket register for exception dispatched/punted packets based on reason
- add to the Punt API to allow different descriptions of the desired packets: UDP or exceptions - move the punt nodes into punt_node.c - improve tests (test that the correct packets are punted to the registered socket) Change-Id: I1a133dec88106874993cba1f5a439cd26b2fef72 Signed-off-by: Neale Ranns <nranns@cisco.com>
Diffstat (limited to 'src/vnet/ip/punt.md')
-rw-r--r--src/vnet/ip/punt.md82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/vnet/ip/punt.md b/src/vnet/ip/punt.md
new file mode 100644
index 00000000000..2bbb5f6b97e
--- /dev/null
+++ b/src/vnet/ip/punt.md
@@ -0,0 +1,82 @@
+.. _punt:
+
+Punting Packets
+===============
+
+.. toctree::
+
+Overview
+________
+
+To 'punt' can mean different things to different people. In VPP the
+data-plane punts when a packet cannot be handled by any further
+nodes. Punt differs from drop, in that VPP is giving other elements of
+the system the opportunity to handle this packet.
+
+A popular meaning of punt is to send packets to the user/control-plane.
+This is specific option of the more general case above, where VPP is
+handing the packet to the control-plane for further prosessing.
+
+The Punt Infrastructe
+---------------------
+
+Exception packets are those that a given node cannot handle via normal
+mecahnisms.
+Punting of exception packets is handled via the VLIB 'punt
+infra'. There are two types of nodes; sources and sinks. Sources
+allocate a punt 'reason' from the infrastructre and load time. When
+they encouter an exception during switch time it will tag the packet
+with the reason and ship the packet of the the punt-dispatch node. A
+sink will register with the punt infra at load time so it can receive
+packets that were punted for that reason. If no sinks are registerd
+for a given reason the packet is dropped, if multiple sinks register
+the packets are replicated.
+
+This mechanism allows us to extend the system to deal with packets
+that the source node would otherise drop.
+
+
+Punting to the Control Plane
+----------------------------
+
+Active Punt
+-----------
+
+The user/control-plane specifies that this is the type of packet I
+want to receive and this is where I want it sent.
+
+Currently there exists 3 ways to describe how to match/classify the
+packets to be punted:
+...
+ 1) a matching UDP port
+ 2) a matching IP protocol (i.e. OSPF)
+ 3) a matching punt excpetion reason (see above)
+...
+
+Depending on the type/classification of the packet to be punted, that
+active punt will register itself into the VLIB graph to receive those
+packets. For example, if it's a packet matching a UDP port then it
+will hook into the UDP port dispatch functions; udp_register_port().
+
+There exists only one sink for passive punt, a unix domain socket. But
+more work is underway in this area.
+
+see the API in: vnet/ip/punt.api
+
+
+
+Passive Punt
+------------
+
+VPP input packet processing can be described as a series of
+classifiers. For example, a sequence of input classifications could
+be, is it IP? is it for-us? is it UDP? is it a known UDP-port? If at
+some point in this pipline VPP has no further classifications to make,
+then the packet can be punted, which means sent to ipX-punt node. This
+is described as passive since the control-plane is thus receiving
+every packet that VPP does not itself handle.
+For passive punt the user can specify where the packets should be
+sent and whether/how they should be policed/rate-limited.
+
+see the API in: vnet/ip/ip.api
+