static int process_del_port(int client) { ctl_msg_del_port_t msg; msg.code = CTL_MSG_DEL_PORT_CODE; int n = recvall(client, ((char *) &msg) + 1, sizeof(ctl_msg_del_port_t) - 1); assert(n == sizeof(ctl_msg_del_port_t) - 1); errno = 0; int port_num = strtol(msg.iface, NULL, 10); // FIXME: Not sure how to convert interface string to int. assert(errno == 0); int status = del_port(port_num); send_status_reply(client, msg.request_id, status); return 0; }
int del_vpn_info(vpn_entry *vpn,int vpn_id){ if(vpn==NULL) return -1; vpn_entry *this, *vpn_top; vpn_top=vpn; //port_id_entry *free_node; this=search_vpn_node(vpn,vpn_id); while(this->port_id_ptr!=NULL){ printf("del port :%d\n",this->port_id_ptr->port_id); del_port(this,this->port_id_ptr->port_id); } printf("free vpn_id :%d\n",this->vpn_id); if(!vpn_finish(vpn_top,this->vpn_id)) return 0; else return -1; }
int main(int argc, char *argv[]) { sk = create_genl_socket(); sk2 = create_genl_socket(); /* Resolve generic netlink families. */ ovs_datapath_family = genl_ctrl_resolve(sk, OVS_DATAPATH_FAMILY); ovs_packet_family = genl_ctrl_resolve(sk, OVS_PACKET_FAMILY); ovs_vport_family = genl_ctrl_resolve(sk, OVS_VPORT_FAMILY); ovs_flow_family = genl_ctrl_resolve(sk, OVS_FLOW_FAMILY); if (ovs_datapath_family < 0 || ovs_packet_family < 0 || ovs_vport_family < 0 || ovs_flow_family < 0) { fprintf(stderr, "Failed to resolve Open vSwitch generic netlink families; module not loaded?\n"); return 1; } parse_options(argc, argv); argc -= optind; argv += optind; if (argc < 1) { help(); return 1; } const char *cmd = argv[0]; if (!strcmp(cmd, "help")) { help(); } else if (!strcmp(cmd, "show")) { show(); } else if (!strcmp(cmd, "add-port") ||!strcmp(cmd, "add-if")) { if (argc != 2) { fprintf(stderr, "Wrong number of arguments for the %s command (try help)\n", cmd); return 1; } add_port(datapath_name, argv[1]); } else if (!strcmp(cmd, "add-internal-port")) { if (argc != 2) { fprintf(stderr, "Wrong number of arguments for the %s command (try help)\n", cmd); return 1; } add_internal_port(datapath_name, argv[1]); } else if (!strcmp(cmd, "del-port") ||!strcmp(cmd, "del-if")) { if (argc != 2) { fprintf(stderr, "Wrong number of arguments for the %s command (try help)\n", cmd); return 1; } del_port(datapath_name, argv[1]); } else if (!strcmp(cmd, "del-br") ||!strcmp(cmd, "del-dp")) { if (argc != 1) { fprintf(stderr, "Wrong number of arguments for the %s command (try help)\n", cmd); return 1; } del_dp(datapath_name); } else { fprintf(stderr, "Unknown command '%s' (try help)\n", cmd); return 1; } return 0; }