Details
-
Bug
-
Status: Resolved
-
Resolution: Done
-
None
-
None
-
None
-
Operating System: Mac OS
Platform: PC
-
1544
Description
An explicit LLDP flow should be added to table 0 to punt LLDP packets to the controller - so that we do not need to rely on implementation specific table miss flow entry behavior.
Also it is likely that we are expecting the whole unbuffered packet during the packet-ins - rather than partial packets. In this case it makes sense to explicitly configure the switch to send the full unbuffered packets to the controller (to make the controller operation more predictable & not dependent on the switch defaults). Hence make sure the LLDP flow output action has max_len as OFPCML_NO_BUFFER. (We will have a separate bug for setting switch configuration to send whole packets to the controller by default).
More details:
From the spec:
From 6.1.2 Asynchronous:
"If the packet is buffered, the number of bytes of the original packet to include in the packet-in can be configured. By default, it is 128 bytes. For packet-in generated by an output action in a flow entries or group bucket, it can be specified individually in the output action itself (see 7.2.5), for other packet-in it can be configured in the switch configuration (see 7.3.2)."
The output action has the following:
/* Action structure for OFPAT_OUTPUT, which sends packets out ’port’.
- When the ’port’ is the OFPP_CONTROLLER, ’max_len’ indicates the max
- number of bytes to send. A ’max_len’ of zero means no bytes of the
- packet should be sent. A ’max_len’ of OFPCML_NO_BUFFER means that
- the packet is not buffered and the complete packet is to be sent to
- the controller. */
struct ofp_action_output {
uint16_t type;
uint16_t len;
uint32_t port;
uint16_t max_len;
uint8_t pad[6];
/* OFPAT_OUTPUT. */
/* Length is 16. */
/* Output port. */
/* Max length to send to controller. */
/* Pad to 64 bits. */
};
The LLDP flow max_len should be set to OFPCML_NO_BUFFER.