int send_msg_to_switch(Csprite* p, uint16_t cmd, userid_t sender_id ,Cmessage * c_in) { //Common buffer for sending package to switch //Connect to switch and send init package in case of disconnection if (switch_fd == -1) { connect_to_switch(); } if ((switch_fd == -1) ) { KDEBUG_LOG(sender_id, "FAILED SENDING PACKAGE TO SWITCH\t[switch_fd=%d]", switch_fd); return 0; } //Build the package static uint8_t sw_pkg[sizeof(switch_proto_t) ]; switch_proto_t* pkg = (switch_proto_t*)sw_pkg; pkg->len = sizeof(switch_proto_t ); pkg->seq = (p ? ((p->fdsess->fd) << 16) | (p->get_waitcmd()) : 0); // set higher 16 bytes fd and lower 16 bytes waitcmd pkg->cmd = cmd; pkg->ret = 0; pkg->sender_id = sender_id; if (p) { KDEBUG_LOG(p->id, "TO SW\t[cmd=%u waitcmd=%u]", cmd, p->get_waitcmd()); } return net_send_msg(switch_fd , (char*)pkg , c_in ); }
static void daemon_user_init(void *data, void *dev) { struct daemon_data *pri = data; struct timeval tv; struct { char zero; int pid; int usecs; } name; if(!strcmp(pri->sock_type, "unix")) pri->ctl_addr = new_addr(pri->ctl_sock, strlen(pri->ctl_sock) + 1); name.zero = 0; name.pid = os_getpid(); gettimeofday(&tv, NULL); name.usecs = tv.tv_usec; pri->local_addr = new_addr(&name, sizeof(name)); pri->dev = dev; pri->fd = connect_to_switch(pri); if(pri->fd < 0){ kfree(pri->local_addr); pri->local_addr = NULL; } }