Esempio n. 1
0
static void display_functions(std::ostream & out, model_core const & md, bool partial) {
    unsigned sz = md.get_num_functions();
    for (unsigned i = 0; i < sz; i++) {
        func_decl * f = md.get_function(i);
        display_function(out, md, f, partial);
    }
}
Esempio n. 2
0
int display_src_node_info(const int type, const unsigned int bridge_id, 
    const unsigned int ip_addr, const unsigned int layer7_id, void (*display_function)(struct user_stat_entry *))
{
    struct user_stat_msg request;
    struct respond_message respond_msg;
    int sock;
    int size = sizeof(struct respond_message);
    struct sockaddr_nl remote;

    DEBUGP("%s:begin bridge_id=[%u],ip_addr=[%u.%u.%u.%u],layer7_id=[%u]\n",__FUNCTION__,bridge_id,NIPQUAD(ip_addr),layer7_id);
    if(layer7_id < 0 || layer7_id > 65535)
    {
        //perror("input layer7 id is invalid\n");
        return -1;
    }
    request.bridge_id = bridge_id;
    request.addr = ip_addr;
    request.layer7_id = layer7_id;
	sock = _do_command(type, &request);
    if(sock == -1)
		return -1;
    
    printf("{\"data\":[");
    while(1)
    {
        socklen_t remote_addr_len = sizeof(struct sockaddr_nl);
        int recv_len = recvfrom(sock, &respond_msg, size,
                0, (struct sockaddr*)&remote, &remote_addr_len);
        if(recv_len == -1){
            //perror("recvmsg error\n");
            break;
        }
        if(recv_len == 0){
            break;
        }
        if(respond_msg.nlhdr.nlmsg_type < NET_STAT_PROTOCOL_SUM_OK || 
            respond_msg.nlhdr.nlmsg_type > NET_STAT_ERROR_INFO)
        {
            break;
        }
        
		if(respond_msg.nlhdr.nlmsg_type == NET_STAT_NULL_INFO)
			break;
        int size = (respond_msg.nlhdr.nlmsg_len - sizeof(struct nlmsghdr)) / sizeof(struct user_stat_entry);
        int i = 0;
        for(i = 0; i < size; i++){
            struct user_stat_entry * node = &respond_msg.account_entry[i];
            if(node == NULL)
                break;
            if(node->src_ip == 0 && node->layer7_name[0] == '\0' && node->layer7_id == 0)
                break;
            if(display_function)
                display_function(node);
        }
    }
    printf("],\"iserror\":0,\"msg\":\"\"}");
    close(sock);    
    DEBUGP("%s:finish\n",__FUNCTION__);
    return 0;
}