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

« back to all changes in this revision

Viewing changes to src/nl-route-get.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
 * src/nl-route-get.c     Get Route Attributes
 
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/cli/utils.h>
 
13
#include <netlink/cli/route.h>
 
14
#include <netlink/cli/link.h>
 
15
 
 
16
static void print_usage(void)
 
17
{
 
18
        printf("Usage: nl-route-get <addr>\n");
 
19
        exit(1);
 
20
}
 
21
 
 
22
static void parse_cb(struct nl_object *obj, void *arg)
 
23
{
 
24
        //struct rtnl_route *route = (struct rtnl_route *) obj;
 
25
        struct nl_dump_params params = {
 
26
                .dp_fd = stdout,
 
27
                .dp_type = NL_DUMP_DETAILS,
 
28
        };
 
29
 
 
30
        nl_object_dump(obj, &params);
 
31
}
 
32
 
 
33
static int cb(struct nl_msg *msg, void *arg)
 
34
{
 
35
        int err;
 
36
 
 
37
        if ((err = nl_msg_parse(msg, &parse_cb, NULL)) < 0)
 
38
                nl_cli_fatal(err, "Unable to parse object: %s", nl_geterror(err));
 
39
 
 
40
        return 0;
 
41
}
 
42
 
 
43
int main(int argc, char *argv[])
 
44
{
 
45
        struct nl_sock *sock;
 
46
        struct nl_cache *link_cache, *route_cache;
 
47
        struct nl_addr *dst;
 
48
        int err = 1;
 
49
 
 
50
        if (argc < 2 || !strcmp(argv[1], "-h"))
 
51
                print_usage();
 
52
 
 
53
        sock = nl_cli_alloc_socket();
 
54
        nl_cli_connect(sock, NETLINK_ROUTE);
 
55
        link_cache = nl_cli_link_alloc_cache(sock);
 
56
        route_cache = nl_cli_route_alloc_cache(sock, 0);
 
57
 
 
58
        dst = nl_cli_addr_parse(argv[1], AF_INET);
 
59
 
 
60
        {
 
61
                struct nl_msg *m;
 
62
                struct rtmsg rmsg = {
 
63
                        .rtm_family = nl_addr_get_family(dst),
 
64
                        .rtm_dst_len = nl_addr_get_prefixlen(dst),
 
65
                };
 
66
 
 
67
                m = nlmsg_alloc_simple(RTM_GETROUTE, 0);
 
68
                nlmsg_append(m, &rmsg, sizeof(rmsg), NLMSG_ALIGNTO);
 
69
                nla_put_addr(m, RTA_DST, dst);
 
70
 
 
71
                err = nl_send_auto_complete(sock, m);
 
72
                nlmsg_free(m);
 
73
                if (err < 0)
 
74
                        nl_cli_fatal(err, "%s", nl_geterror(err));
 
75
 
 
76
                nl_socket_modify_cb(sock, NL_CB_VALID, NL_CB_CUSTOM, cb, NULL);
 
77
 
 
78
                if (nl_recvmsgs_default(sock) < 0)
 
79
                        nl_cli_fatal(err, "%s", nl_geterror(err));
 
80
        }
 
81
 
 
82
        //nl_cache_dump(route_cache, &params);
 
83
 
 
84
        return 0;
 
85
}