int p4ns_db_del_port(p4ns_db_cxt_t c, const char *name, const char *iface) { redisReply *reply; char ports_key[128]; char port_nums_key[128]; get_ports_key(ports_key, name); get_port_nums_key(port_nums_key, name); if(!p4ns_db_has_datapath(c, name)) { /* datapath does not exist */ return P4NSDB_ERROR_INVALID_DATAPATH; } if(!has_port(c, ports_key, iface)) { /* port invalid */ return P4NSDB_ERROR_INVALID_PORT; } reply = redisCommand(c, "HGET %s %s", ports_key, iface); p4ns_port_t *p4ns_port = (p4ns_port_t *) reply->str; uint16_t port_num = p4ns_port->port_num; freeReplyObject(reply); reply = redisCommand(c, "HDEL %s %s", ports_key, iface); assert(reply->integer == 1); freeReplyObject(reply); reply = redisCommand(c, "SREM %s %d", port_nums_key, port_num); assert(reply->integer == 1); freeReplyObject(reply); return 0; }
int p4ns_db_add_port(p4ns_db_cxt_t c, const char *name, const char *iface, uint16_t port_num) { redisReply *reply; char ports_key[128]; char port_nums_key[128]; get_ports_key(ports_key, name); get_port_nums_key(port_nums_key, name); if(!p4ns_db_has_datapath(c, name)) { /* datapath does not exist */ return P4NSDB_ERROR_INVALID_DATAPATH; } if(has_port(c, ports_key, iface)) { /* port exists */ return P4NSDB_ERROR_PORT_EXISTS; } if(has_port_num(c, port_nums_key, port_num)) { /* port num taken */ return P4NSDB_ERROR_PORT_NUM_TAKEN; } p4ns_port_t p4ns_port; memset(&p4ns_port, 0, sizeof(p4ns_port_t)); p4ns_port.port_num = port_num; strncpy(p4ns_port.iface, iface, 64); reply = redisCommand(c, "HSET %s %s %b", ports_key, iface, &p4ns_port, sizeof(p4ns_port_t)); assert(reply->integer == 1); freeReplyObject(reply); reply = redisCommand(c, "SADD %s %d", port_nums_key, port_num); assert(reply->integer == 1); freeReplyObject(reply); return 0; }
int p4ns_db_has_port(p4ns_db_cxt_t c, const char *name, const char *iface) { char ports_key[128]; get_ports_key(ports_key, name); if(!p4ns_db_has_datapath(c, name)) { /* datapath does not exist */ return 0; } return has_port(c, ports_key, iface); }
struct url_t *url_parse(const char *url) { struct url_t *self = url_new(); const char *p = url; if (!(p = parse_protocol(self, p))) { url_free(self); return NULL; } self->has_port = has_port(p); if (!(p = parse_host(self, p))) { url_free(self); return NULL; } if (!(p = parse_port(self, p))) { url_free(self); return NULL; } self->path = strdup(p); return self; }
static ActionSkBuff filter_port(arguments_t args, SkBuff b) { const u16 port = GET_ARG(u16, args); return has_port(b, port) ? Pass(b) : Drop(b); }
static bool pred_has_port(arguments_t args, SkBuff b) { const u16 port = GET_ARG(u16, args); return has_port(b, port); }