Example #1
0
unsigned int
event_subscribe(unsigned int event_id, ptrEventCallback callback) {
	Subscriber *subscriber;
	Subscriber *cur_sub;
	
	LOG_DEBUG("Adding new subscriber to event ID %d...", event_id);
	
	subscriber = malloc(sizeof(Subscriber));
	if (subscriber == NULL) {
		LOG_SEVERE("Could not assign new subscriber for event %d. In " \
			"sufficient memory.", event_id);
		return;
	}
	memset(subscriber, '\0', sizeof(Subscriber));
	
	subscriber->id = ++last_subscriber_id;
	subscriber->event_id = event_id;
	
	subscriber->callback = malloc(sizeof(ptrEventCallback));
	if (subscriber->callback == NULL) {
		LOG_SEVERE("Could not assign new subscriber for event %d. In " \
			"sufficient memory.", event_id);
		free(subscriber);
		return;
	}
	memcpy(subscriber->callback, callback, sizeof(ptrEventCallback));
		
	// add the subscriber to the list
	queue_push(event_subscribers, subscriber);
		
	LOG_DEBUG("Subscriber added %d", subscriber->id);
	return subscriber->id;
}
Example #2
0
/**
 * context: {node, link} 
 * tokens: {node-address, destination-prefix, area}
 */
int cli_net_node_link_ospf_area(SCliContext * pContext, STokens * pTokens)
{
  net_node_t * pNode;
  ospf_area_t tArea;
  int iReturn = CLI_SUCCESS;
  net_iface_t * pLink;
  
  pLink = (net_iface_t *) cli_context_get_item_at_top(pContext);
  pNode = (net_node_t *) cli_context_get_item_at(pContext, 0);
  
  if (tokens_get_uint_at(pTokens, 2, &tArea)) {
    LOG_SEVERE("Error: invalid value for ospf-area (%s)\n",
	       tokens_get_string_at(pTokens, 2));
    return CLI_ERROR_COMMAND_FAILED;
  }
  //link_get_prefix(pLink, &sDestPrefix);
  
  switch(link_set_ospf_area(pLink, tArea)){
    case  OSPF_LINK_OK : 
    break;
    
    case  OSPF_LINK_TO_MYSELF_NOT_IN_AREA : 
            LOG_SEVERE("Warning: ospf area link is changed\n");
    break;
    
    case  OSPF_SOURCE_NODE_NOT_IN_AREA    : 
            LOG_SEVERE("Error: source node must belong to area\n");
	    iReturn = CLI_ERROR_COMMAND_FAILED;
    break;
    
    case  OSPF_DEST_NODE_NOT_IN_AREA      : 
            LOG_SEVERE("Error: destination node must belongs to area\n");
	    iReturn = CLI_ERROR_COMMAND_FAILED;
    break;
    
    case  OSPF_DEST_SUBNET_NOT_IN_AREA    : 
            LOG_SEVERE("Error: destination subnet must belongs to area\n");
	    iReturn = CLI_ERROR_COMMAND_FAILED;
    break;
    
    case  OSPF_SOURCE_NODE_LINK_MISSING   : //never verified because link is found in context
            LOG_SEVERE("Error: link is not present\n");
	    iReturn = CLI_ERROR_COMMAND_FAILED;
    break;
    default : LOG_SEVERE("Error: unknown reasons\n");
	      iReturn = CLI_ERROR_COMMAND_FAILED;
  }
  
  return iReturn;
}
Example #3
0
/**
 * context: {subnet}
 * tokens: {area}
 */
int cli_net_subnet_ospf_area(SCliContext * pContext, STokens * pTokens)
{
  net_subnet_t * pSubnet;
  ospf_area_t uArea;

  // Get node from context
  pSubnet= (net_subnet_t *) cli_context_get_item_at_top(pContext);

  // set subnet ospf area
  tokens_get_uint_at(pTokens, 1, &uArea);
  if (subnet_set_OSPFArea(pSubnet, uArea) != 0) {
    LOG_SEVERE("Warning: correctness of ospf are info of links on subnet is not guaranteed!\n");
    return CLI_SUCCESS;
  }

  return CLI_SUCCESS;
}