X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fvconn.c;h=d1b8353b2cf319a2f39a93cb2ad66fe15404ccd4;hb=7778bd15dacc1e410b60ff6ec2996c475a875e6e;hp=12680c5ba54d9f9a7ecd82dd01dbf01a372402b4;hpb=dc6fe1d7ee2f1dbafea795c110ccdbb54a5946e5;p=openvswitch diff --git a/lib/vconn.c b/lib/vconn.c index 12680c5b..d1b8353b 100644 --- a/lib/vconn.c +++ b/lib/vconn.c @@ -928,6 +928,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,