Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
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);
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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);
}
Ejemplo n.º 6
0
static bool
pred_has_port(arguments_t args, SkBuff b)
{
	const u16 port = GET_ARG(u16, args);
	return has_port(b, port);
}