~ubuntu-branches/ubuntu/trusty/libnl3/trusty

« back to all changes in this revision

Viewing changes to src/nl-list-caches.c

  • Committer: Bazaar Package Importer
  • Author(s): Heiko Stuebner
  • Date: 2011-05-21 19:25:13 UTC
  • Revision ID: james.westby@ubuntu.com-20110521192513-1ieyu9w9kym4bt16
Tags: upstream-3.0
ImportĀ upstreamĀ versionĀ 3.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * nl-list-caches.c     List registered cache types
 
3
 *
 
4
 *      This library is free software; you can redistribute it and/or
 
5
 *      modify it under the terms of the GNU Lesser General Public
 
6
 *      License as published by the Free Software Foundation version 2.1
 
7
 *      of the License.
 
8
 *
 
9
 * Copyright (c) 2003-2009 Thomas Graf <tgraf@suug.ch>
 
10
 */
 
11
 
 
12
#include <netlink-local.h>
 
13
#include <netlink/cli/utils.h>
 
14
 
 
15
static void print_usage(void)
 
16
{
 
17
        fprintf(stderr, "Usage: nl-list-caches\n");
 
18
        exit(1);
 
19
}
 
20
 
 
21
static char *id_attr_list(struct nl_object_ops *ops, char *buf, size_t len)
 
22
{
 
23
        if (ops->oo_attrs2str != NULL)
 
24
                return ops->oo_attrs2str(ops->oo_id_attrs, buf, len);
 
25
        else {
 
26
                memset(buf, 0, len);
 
27
                return buf;
 
28
        }
 
29
}
 
30
 
 
31
static void print(struct nl_cache_ops *ops, void *arg)
 
32
{
 
33
        char buf[64];
 
34
 
 
35
        printf("%s:\n" \
 
36
               "    hdrsize: %d bytes\n" \
 
37
               "    protocol: %s\n" \
 
38
               "    request-update: %s\n" \
 
39
               "    msg-parser: %s\n",
 
40
               ops->co_name, ops->co_hdrsize,
 
41
               nl_nlfamily2str(ops->co_protocol, buf, sizeof(buf)),
 
42
               ops->co_request_update ? "yes" : "no",
 
43
               ops->co_msg_parser ? "yes" : "no");
 
44
 
 
45
        if (ops->co_obj_ops) {
 
46
                struct nl_object_ops *obj_ops = ops->co_obj_ops;
 
47
                const char *dump_names[NL_DUMP_MAX+1] = {
 
48
                        "brief",
 
49
                        "detailed",
 
50
                        "stats",
 
51
                };
 
52
                int i;
 
53
 
 
54
                printf("    cacheable object:\n" \
 
55
                       "        name: %s:\n" \
 
56
                       "        size: %zu bytes\n" \
 
57
                       "        constructor: %s\n" \
 
58
                       "        free-data: %s\n" \
 
59
                       "        clone: %s\n" \
 
60
                       "        compare: %s\n" \
 
61
                       "        id attributes: %s\n" \
 
62
                       "        dump: ",
 
63
                       obj_ops->oo_name, obj_ops->oo_size,
 
64
                       obj_ops->oo_constructor ? "yes" : "no",
 
65
                       obj_ops->oo_free_data ? "yes" : "no",
 
66
                       obj_ops->oo_clone ? "yes" : "no",
 
67
                       obj_ops->oo_compare ? "yes" : "no",
 
68
                       id_attr_list(obj_ops, buf, sizeof(buf)));
 
69
 
 
70
                for (i = 0; i <= NL_DUMP_MAX; i++)
 
71
                        if (obj_ops->oo_dump[i])
 
72
                                printf("%s%s",
 
73
                                i == 0 ? "" : ", ",
 
74
                                dump_names[i]);
 
75
 
 
76
                printf("\n");
 
77
        }
 
78
 
 
79
        if (ops->co_genl) {
 
80
                struct genl_ops *genl_ops = ops->co_genl;
 
81
 
 
82
                printf("    genl:\n" \
 
83
                       "        name: %s\n" \
 
84
                       "        family: %d\n" \
 
85
                       "        id: %d\n",
 
86
                       genl_ops->o_name, genl_ops->o_family, genl_ops->o_id);
 
87
 
 
88
                if (genl_ops->o_ncmds) {
 
89
                        int i;
 
90
 
 
91
                        printf("        cmds:\n");
 
92
 
 
93
                        for (i = 0; i < genl_ops->o_ncmds; i++) {
 
94
                                struct genl_cmd *cmd = &genl_ops->o_cmds[i];
 
95
 
 
96
                                printf("            %s:\n"
 
97
                                       "                id: %d\n" \
 
98
                                       "                maxattr: %d\n" \
 
99
                                       "                msg-parser: %s\n" \
 
100
                                       "                attr-policy: %s\n",
 
101
                                       cmd->c_name, cmd->c_id, cmd->c_maxattr,
 
102
                                       cmd->c_msg_parser ? "yes" : "no",
 
103
                                       cmd->c_attr_policy ? "yes" : "no");
 
104
                        }
 
105
                }
 
106
        }
 
107
}
 
108
 
 
109
int main(int argc, char *argv[])
 
110
{
 
111
        if (argc > 1 && !strcasecmp(argv[1], "-h"))
 
112
                print_usage();
 
113
 
 
114
        nl_cache_ops_foreach(print, NULL);
 
115
 
 
116
        return 0;
 
117
}