enum ofputil_protocol protocol,
enum nx_packet_in_format packet_in_format)
{
- size_t send_len = MIN(pin->send_len, pin->packet_len);
struct ofpbuf *packet;
/* Add OFPT_PACKET_IN. */
/* The final argument is just an estimate of the space required. */
packet = ofpraw_alloc_xid(packet_in_raw, packet_in_version,
htonl(0), (sizeof(struct flow_metadata) * 2
- + 2 + send_len));
+ + 2 + pin->packet_len));
ofpbuf_put_zeros(packet, packet_in_size);
oxm_put_match(packet, &match);
ofpbuf_put_zeros(packet, 2);
- ofpbuf_put(packet, pin->packet, send_len);
+ ofpbuf_put(packet, pin->packet, pin->packet_len);
opi = packet->l3;
opi->pi.buffer_id = htonl(pin->buffer_id);
struct ofp10_packet_in *opi;
packet = ofpraw_alloc_xid(OFPRAW_OFPT10_PACKET_IN, OFP10_VERSION,
- htonl(0), send_len);
+ htonl(0), pin->packet_len);
opi = ofpbuf_put_zeros(packet, offsetof(struct ofp10_packet_in, data));
opi->total_len = htons(pin->total_len);
opi->in_port = htons(ofp_to_u16(pin->fmd.in_port));
opi->reason = pin->reason;
opi->buffer_id = htonl(pin->buffer_id);
- ofpbuf_put(packet, pin->packet, send_len);
+ ofpbuf_put(packet, pin->packet, pin->packet_len);
} else if (packet_in_format == NXPIF_NXM) {
struct nx_packet_in *npi;
struct match match;
/* The final argument is just an estimate of the space required. */
packet = ofpraw_alloc_xid(OFPRAW_NXT_PACKET_IN, OFP10_VERSION,
htonl(0), (sizeof(struct flow_metadata) * 2
- + 2 + send_len));
+ + 2 + pin->packet_len));
ofpbuf_put_zeros(packet, sizeof *npi);
match_len = nx_put_match(packet, &match, 0, 0);
ofpbuf_put_zeros(packet, 2);
- ofpbuf_put(packet, pin->packet, send_len);
+ ofpbuf_put(packet, pin->packet, pin->packet_len);
npi = packet->l3;
npi->buffer_id = htonl(pin->buffer_id);
pin.up.total_len = pin.up.packet_len;
if (pin.up.reason == OFPR_ACTION) {
- controller_max_len = pin.up.send_len; /* max_len */
+ controller_max_len = pin.send_len; /* max_len */
} else {
controller_max_len = ofconn->miss_send_len;
}
/* Figure out how much of the packet to send.
* If not buffered, send the entire packet. Otherwise, depending on
* the reason of packet-in, send what requested by the controller. */
- if (pin.up.buffer_id == UINT32_MAX) {
- pin.up.send_len = pin.up.packet_len;
- } else {
- pin.up.send_len = MIN(pin.up.packet_len, controller_max_len);
+ if (pin.up.buffer_id != UINT32_MAX
+ && controller_max_len < pin.up.packet_len) {
+ pin.up.packet_len = controller_max_len;
}
/* Make OFPT_PACKET_IN and hand over to packet scheduler. It might