~ubuntu-branches/ubuntu/jaunty/libdumbnet/jaunty

« back to all changes in this revision

Viewing changes to src/route-hpux.c

  • Committer: Bazaar Package Importer
  • Author(s): Javier Fernandez-Sanguino Pen~a
  • Date: 2005-01-11 16:13:41 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20050111161341-0a1we1xe03mnd2a1
Tags: 1.8-1.3
Fixed SONAME problem by fixing the -version-info number in
src/Makefile.am (Closes: #289777)

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
 *
4
4
 * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
5
5
 *
6
 
 * $Id: route-hpux.c,v 1.9 2003/03/16 19:29:45 dugsong Exp $
 
6
 * $Id: route-hpux.c,v 1.11 2004/01/14 04:52:11 dugsong Exp $
7
7
 */
8
8
 
9
9
#include "config.h"
23
23
 
24
24
#include "dumbnet.h"
25
25
 
 
26
#define ADDR_ISHOST(a)  (((a)->addr_type == ADDR_TYPE_IP &&     \
 
27
                          (a)->addr_bits == IP_ADDR_BITS) ||    \
 
28
                         ((a)->addr_type == ADDR_TYPE_IP6 &&    \
 
29
                          (a)->addr_bits == IP6_ADDR_BITS))
 
30
 
26
31
struct route_handle {
27
32
        int     fd;
28
33
};
32
37
{
33
38
        route_t *r;
34
39
 
35
 
        if ((r = calloc(1, sizeof(*r))) == NULL)
36
 
                return (NULL);
37
 
 
38
 
        if ((r->fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
39
 
                return (route_close(r));
40
 
        
 
40
        if ((r = calloc(1, sizeof(*r))) != NULL) {
 
41
                if ((r->fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
 
42
                        return (route_close(r));
 
43
        }
41
44
        return (r);
42
45
}
43
46
 
45
48
route_add(route_t *r, const struct route_entry *entry)
46
49
{
47
50
        struct rtentry rt;
 
51
        struct addr dst;
48
52
        
49
53
        memset(&rt, 0, sizeof(rt));
50
 
 
51
 
        if (addr_ntos(&entry->route_dst, &rt.rt_dst) < 0 ||
52
 
            addr_ntos(&entry->route_gw, &rt.rt_gateway) < 0)
 
54
        rt.rt_flags = RTF_UP | RTF_GATEWAY;
 
55
 
 
56
        if (ADDR_ISHOST(&entry->route_dst)) {
 
57
                rt.rt_flags |= RTF_HOST;
 
58
                memcpy(&dst, &entry->route_dst, sizeof(dst));
 
59
        } else
 
60
                addr_net(&entry->route_dst, &dst);
 
61
 
 
62
        if (addr_ntos(&dst, &rt.rt_dst) < 0 ||
 
63
            addr_ntos(&entry->route_gw, &rt.rt_gateway) < 0 ||
 
64
            addr_btom(entry->route_dst.addr_bits, &rt.rt_subnetmask,
 
65
                IP_ADDR_LEN) < 0)
53
66
                return (-1);
54
 
 
55
 
        if (entry->route_dst.addr_bits < IP_ADDR_BITS) {
56
 
                rt.rt_flags = RTF_UP | RTF_GATEWAY;
57
 
                if (addr_btom(entry->route_dst.addr_bits, &rt.rt_subnetmask,
58
 
                    IP_ADDR_LEN) < 0)
59
 
                        return (-1);
60
 
        } else {
61
 
                rt.rt_flags = RTF_UP | RTF_HOST | RTF_GATEWAY;
62
 
                addr_btom(IP_ADDR_BITS, &rt.rt_subnetmask, IP_ADDR_LEN);
63
 
        }
 
67
        
64
68
        return (ioctl(r->fd, SIOCADDRT, &rt));
65
69
}
66
70
 
68
72
route_delete(route_t *r, const struct route_entry *entry)
69
73
{
70
74
        struct rtentry rt;
 
75
        struct addr dst;
71
76
 
72
77
        memset(&rt, 0, sizeof(rt));
73
 
 
74
 
        if (addr_ntos(&entry->route_dst, &rt.rt_dst) < 0)
 
78
        rt.rt_flags = RTF_UP;
 
79
        
 
80
        if (ADDR_ISHOST(&entry->route_dst)) {
 
81
                rt.rt_flags |= RTF_HOST;
 
82
                memcpy(&dst, &entry->route_dst, sizeof(dst));
 
83
        } else
 
84
                addr_net(&entry->route_dst, &dst);
 
85
        
 
86
        if (addr_ntos(&dst, &rt.rt_dst) < 0 ||
 
87
            addr_btom(entry->route_dst.addr_bits, &rt.rt_subnetmask,
 
88
                IP_ADDR_LEN) < 0)
75
89
                return (-1);
76
 
 
77
 
        if (entry->route_dst.addr_bits < IP_ADDR_BITS) {
78
 
                rt.rt_flags = RTF_UP;
79
 
                if (addr_btom(entry->route_dst.addr_bits, &rt.rt_subnetmask,
80
 
                    IP_ADDR_LEN) < 0)
81
 
                        return (-1);
82
 
        } else {
83
 
                rt.rt_flags = RTF_UP | RTF_HOST;
84
 
                addr_btom(IP_ADDR_BITS, &rt.rt_subnetmask, IP_ADDR_LEN);
85
 
        }
 
90
        
86
91
        return (ioctl(r->fd, SIOCDELRT, &rt));
87
92
}
88
93
 
166
171
route_t *
167
172
route_close(route_t *r)
168
173
{
169
 
        if (r->fd > 0)
170
 
                close(r->fd);
171
 
        free(r);
 
174
        if (r != NULL) {
 
175
                if (r->fd >= 0)
 
176
                        close(r->fd);
 
177
                free(r);
 
178
        }
172
179
        return (NULL);
173
180
}