X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fvconn.c;h=3cd2948745956b7d632538250988436a17317cb9;hb=576e26d7b47f4e53116ef0b5f035d260f426d37b;hp=66a56bcd16150611facbeacd8ad8e9b53ce5ff70;hpb=2a6cb303b0b9956952a1599092e64f5805ee741a;p=sliver-openvswitch.git diff --git a/lib/vconn.c b/lib/vconn.c index 66a56bcd1..3cd294874 100644 --- a/lib/vconn.c +++ b/lib/vconn.c @@ -911,6 +911,28 @@ make_add_simple_flow(const flow_t *flow, return buffer; } +struct ofpbuf * +make_packet_in(uint32_t buffer_id, uint16_t in_port, uint8_t reason, + const struct ofpbuf *payload, int max_send_len) +{ + struct ofp_packet_in *opi; + struct ofpbuf *buf; + int send_len; + + send_len = MIN(max_send_len, payload->size); + buf = ofpbuf_new(sizeof *opi + send_len); + opi = put_openflow_xid(offsetof(struct ofp_packet_in, data), + OFPT_PACKET_IN, 0, buf); + opi->buffer_id = htonl(buffer_id); + opi->total_len = htons(payload->size); + opi->in_port = htons(in_port); + opi->reason = reason; + ofpbuf_put(buf, payload->data, send_len); + update_openflow_length(buf); + + return buf; +} + struct ofpbuf * make_packet_out(const struct ofpbuf *packet, uint32_t buffer_id, uint16_t in_port,