lagopus_result_t ofp_port_status_handle(struct port_status *port_status, uint64_t dpid) { lagopus_result_t ret; struct pbuf *send_pbuf = NULL; if (port_status != NULL) { /* PortStatus. */ ret = ofp_port_status_create(port_status, &send_pbuf); if (ret == LAGOPUS_RESULT_OK) { ret = ofp_role_channel_write(send_pbuf, dpid, OFPT_PORT_STATUS, port_status->ofp_port_status.reason); if (ret != LAGOPUS_RESULT_OK) { lagopus_msg_warning("Socket write error (%s).\n", lagopus_error_get_string(ret)); } } else { lagopus_msg_warning("FAILED : ofp_port_status_create (%s).\n", lagopus_error_get_string(ret)); } /* free. */ if (send_pbuf != NULL) { pbuf_free(send_pbuf); } } else { ret = LAGOPUS_RESULT_INVALID_ARGS; } return ret; }
/* Send PacketIn packet. */ lagopus_result_t ofp_packet_in_handle(struct packet_in *packet_in, uint64_t dpid) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; struct pbuf *send_pbuf = NULL; if (packet_in != NULL && packet_in->data != NULL) { /* PacketIn. */ ret = ofp_packet_in_create(packet_in, &send_pbuf); if (ret == LAGOPUS_RESULT_OK) { ret = ofp_role_channel_write(send_pbuf, dpid, OFPT_PACKET_IN, packet_in->ofp_packet_in.reason); if (ret != LAGOPUS_RESULT_OK) { lagopus_msg_warning("Socket write error (%s).\n", lagopus_error_get_string(ret)); } } else { lagopus_msg_warning("FAILED (%s).\n", lagopus_error_get_string(ret)); } } else { lagopus_msg_warning("Arg is NULL.\n"); ret = LAGOPUS_RESULT_INVALID_ARGS; } /* free. */ if (send_pbuf != NULL) { pbuf_free(send_pbuf); } return ret; }
static lagopus_result_t ofp_role_channel_write_wrap(struct channel **channels, struct ofp_header *xid_headers, struct pbuf *pbuf) { lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES; uint64_t dpid = 0xabc; uint8_t reason = 0x01; int i; (void) channels; (void) xid_headers; for (i = 0; i < CHANNEL_MAX_NUM; i++) { channel_role_mask_set(channels[i], &test_role_mask); } ret = ofp_role_channel_write(pbuf, dpid, OFPT_PACKET_IN, reason); return ret; }