This makes it easier to work with and makes the code more like the
kernel switch.
struct sw_chain *chain; /* Forwarding rules. */
struct sw_chain *chain; /* Forwarding rules. */
- struct ofp_switch_config config;
+ /* Configuration set from controller. */
+ uint16_t flags;
+ uint16_t miss_send_len;
/* Switch ports. */
struct sw_port ports[OFPP_MAX];
/* Switch ports. */
struct sw_port ports[OFPP_MAX];
}
list_init(&dp->port_list);
}
list_init(&dp->port_list);
- dp->config.flags = 0;
- dp->config.miss_send_len = htons(OFP_DEFAULT_MISS_SEND_LEN);
+ dp->flags = 0;
+ dp->miss_send_len = OFP_DEFAULT_MISS_SEND_LEN;
execute_actions(dp, buffer, in_port, &key,
flow->actions, flow->n_actions);
} else {
execute_actions(dp, buffer, in_port, &key,
flow->actions, flow->n_actions);
} else {
- dp_output_control(dp, buffer, in_port, ntohs(dp->config.miss_send_len),
+ dp_output_control(dp, buffer, in_port, dp->miss_send_len,
osc = make_openflow_reply(sizeof *osc, OFPT_GET_CONFIG_REPLY,
sender, &buffer);
osc = make_openflow_reply(sizeof *osc, OFPT_GET_CONFIG_REPLY,
sender, &buffer);
- assert(sizeof *osc == sizeof dp->config);
- memcpy(((char *)osc) + sizeof osc->header,
- ((char *)&dp->config) + sizeof dp->config.header,
- sizeof dp->config - sizeof dp->config.header);
+ osc->flags = htons(dp->flags);
+ osc->miss_send_len = htons(dp->miss_send_len);
return send_openflow_buffer(dp, buffer, sender);
}
return send_openflow_buffer(dp, buffer, sender);
}
const void *msg)
{
const struct ofp_switch_config *osc = msg;
const void *msg)
{
const struct ofp_switch_config *osc = msg;
+ dp->flags = ntohs(osc->flags);
+ dp->miss_send_len = ntohs(osc->miss_send_len);