}
}
+/* Sets the MAC aging timeout for the OFPP_NORMAL action on 'ofproto' to
+ * 'idle_time', in seconds. */
+void
+ofproto_set_mac_idle_time(struct ofproto *ofproto, unsigned idle_time)
+{
+ if (ofproto->ofproto_class->set_mac_idle_time) {
+ ofproto->ofproto_class->set_mac_idle_time(ofproto, idle_time);
+ }
+}
+
void
ofproto_set_desc(struct ofproto *p,
const char *mfr_desc, const char *hw_desc,
handle_nxt_flow_mod_table_id(struct ofconn *ofconn,
const struct ofp_header *oh)
{
- const struct nxt_flow_mod_table_id *msg
- = (const struct nxt_flow_mod_table_id *) oh;
+ const struct nx_flow_mod_table_id *msg
+ = (const struct nx_flow_mod_table_id *) oh;
ofconn_set_flow_mod_table_id(ofconn, msg->set != 0);
return 0;
static int
handle_nxt_set_flow_format(struct ofconn *ofconn, const struct ofp_header *oh)
{
- const struct nxt_set_flow_format *msg
- = (const struct nxt_set_flow_format *) oh;
+ const struct nx_set_flow_format *msg
+ = (const struct nx_set_flow_format *) oh;
uint32_t format;
format = ntohl(msg->format);
return 0;
}
+static int
+handle_nxt_set_packet_in_format(struct ofconn *ofconn,
+ const struct ofp_header *oh)
+{
+ const struct nx_set_packet_in_format *msg;
+ uint32_t format;
+
+ msg = (const struct nx_set_packet_in_format *) oh;
+ format = ntohl(msg->format);
+ if (format != NXFF_OPENFLOW10 && format != NXPIF_NXM) {
+ return ofp_mkerr(OFPET_BAD_REQUEST, OFPBRC_EPERM);
+ }
+
+ if (format != ofconn_get_packet_in_format(ofconn)
+ && ofconn_has_pending_opgroups(ofconn)) {
+ /* Avoid sending async message in surprsing packet in format. */
+ return OFPROTO_POSTPONE;
+ }
+
+ ofconn_set_packet_in_format(ofconn, format);
+ return 0;
+}
+
static int
handle_barrier_request(struct ofconn *ofconn, const struct ofp_header *oh)
{
case OFPUTIL_NXT_SET_FLOW_FORMAT:
return handle_nxt_set_flow_format(ofconn, oh);
+ case OFPUTIL_NXT_SET_PACKET_IN_FORMAT:
+ return handle_nxt_set_packet_in_format(ofconn, oh);
+
case OFPUTIL_NXT_FLOW_MOD:
return handle_flow_mod(ofconn, oh);
case OFPUTIL_OFPST_AGGREGATE_REPLY:
case OFPUTIL_NXT_ROLE_REPLY:
case OFPUTIL_NXT_FLOW_REMOVED:
+ case OFPUTIL_NXT_PACKET_IN:
case OFPUTIL_NXST_FLOW_REPLY:
case OFPUTIL_NXST_AGGREGATE_REPLY:
default: