network.h 1.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
/*
 * network.h: network helper APIs for libvirt
 *
 * Copyright (C) 2009-2009 Red Hat, Inc.
 *
 * See COPYING.LIB for the License of this software
 *
 * Daniel Veillard <veillard@redhat.com>
 */

#ifndef __VIR_NETWORK_H__
12
# define __VIR_NETWORK_H__
13

14
# include "internal.h"
15

16 17
# include <sys/types.h>
# include <sys/socket.h>
18 19 20
# ifdef HAVE_SYS_UN_H
#  include <sys/un.h>
# endif
21
# include <netdb.h>
22
# include <stdbool.h>
23
# include <netinet/in.h>
24

25 26
typedef struct {
    union {
27
        struct sockaddr sa;
28 29 30
        struct sockaddr_storage stor;
        struct sockaddr_in inet4;
        struct sockaddr_in6 inet6;
31 32 33
# ifdef HAVE_SYS_UN_H
        struct sockaddr_un un;
# endif
34 35
    } data;
    socklen_t len;
36
} virSocketAddr;
37

38 39 40 41 42 43
# define VIR_SOCKET_HAS_ADDR(s)                 \
    ((s)->data.sa.sa_family != AF_UNSPEC)

# define VIR_SOCKET_IS_FAMILY(s, f)             \
    ((s)->data.sa.sa_family == f)

44 45 46 47 48 49 50 51 52 53 54 55
typedef virSocketAddr *virSocketAddrPtr;

int virSocketParseAddr    (const char *val,
                           virSocketAddrPtr addr,
                           int hint);

int virSocketParseIpv4Addr(const char *val,
                           virSocketAddrPtr addr);

int virSocketParseIpv6Addr(const char *val,
                           virSocketAddrPtr addr);

M
Matthew Booth 已提交
56
char * virSocketFormatAddr(virSocketAddrPtr addr);
57 58 59
char * virSocketFormatAddrFull(virSocketAddrPtr addr,
                               bool withService,
                               const char *separator);
M
Matthew Booth 已提交
60 61 62 63 64

int virSocketSetPort(virSocketAddrPtr addr, int port);

int virSocketGetPort(virSocketAddrPtr addr);

65 66 67 68 69 70 71 72
int virSocketGetRange     (virSocketAddrPtr start,
                           virSocketAddrPtr end);

int virSocketAddrIsNetmask(virSocketAddrPtr netmask);

int virSocketCheckNetmask (virSocketAddrPtr addr1,
                           virSocketAddrPtr addr2,
                           virSocketAddrPtr netmask);
73 74 75

int virSocketGetNumNetmaskBits(const virSocketAddrPtr netmask);

76
#endif /* __VIR_NETWORK_H__ */