Branch data Line data Source code
1 : : #ifndef __CR_SOCKETS_H__
2 : : #define __CR_SOCKETS_H__
3 : :
4 : : #include <sys/types.h>
5 : : #include <sys/socket.h>
6 : : #include <unistd.h>
7 : : #include <stdbool.h>
8 : :
9 : : #include "types.h"
10 : :
11 : : #include "protobuf.h"
12 : : #include "../protobuf/sk-opts.pb-c.h"
13 : :
14 : : struct fdinfo_list_entry;
15 : : struct sk_opts_entry;
16 : : struct cr_options;
17 : : struct file_desc;
18 : : struct fd_parms;
19 : : struct cr_fdset;
20 : : struct nlmsghdr;
21 : :
22 : : struct socket_desc {
23 : : unsigned int family;
24 : : unsigned int ino;
25 : : struct socket_desc *next;
26 : : int already_dumped;
27 : : };
28 : :
29 : : extern int dump_socket(struct fd_parms *p, int lfd, const struct cr_fdset *cr_fdset);
30 : : extern int dump_socket_opts(int sk, SkOptsEntry *soe);
31 : : extern int restore_socket_opts(int sk, SkOptsEntry *soe);
32 : : extern void release_skopts(SkOptsEntry *);
33 : : extern int restore_prepare_socket(int sk);
34 : :
35 : : extern int sk_collect_one(int ino, int family, struct socket_desc *d);
36 : : extern int collect_sockets(int pid);
37 : : extern int collect_inet_sockets(void);
38 : : extern int collect_unix_sockets(void);
39 : : extern int fix_external_unix_sockets(void);
40 : : extern int resolve_unix_peers(void);
41 : :
42 : : extern void show_unixsk(int fd, struct cr_options *o);
43 : : extern void show_inetsk(int fd, struct cr_options *o);
44 : : extern void show_sk_queues(int fd, struct cr_options *o);
45 : :
46 : : extern char *skfamily2s(u32 f);
47 : : extern char *sktype2s(u32 t);
48 : : extern char *skproto2s(u32 p);
49 : : extern char *skstate2s(u32 state);
50 : :
51 : : extern struct socket_desc *lookup_socket(int ino, int family);
52 : :
53 : : extern int dump_one_inet(struct fd_parms *p, int lfd, const struct cr_fdset *set);
54 : : extern int dump_one_inet6(struct fd_parms *p, int lfd, const struct cr_fdset *set);
55 : : extern int dump_one_unix(struct fd_parms *p, int lfd, const struct cr_fdset *set);
56 : :
57 : : extern int inet_collect_one(struct nlmsghdr *h, int family, int type, int proto);
58 : : extern int unix_receive_one(struct nlmsghdr *h, void *);
59 : :
60 : : extern int do_dump_opt(int sk, int level, int name, void *val, int len);
61 : : #define dump_opt(s, l, n, f) do_dump_opt(s, l, n, f, sizeof(*f))
62 : : extern int do_restore_opt(int sk, int level, int name, void *val, int len);
63 : : #define restore_opt(s, l, n, f) do_restore_opt(s, l, n, f, sizeof(*f))
64 : :
65 : : #define sk_encode_shutdown(img, mask) do { \
66 : : /* \
67 : : * protobuf SK_SHUTDOWN__ bits match those \
68 : : * reported by kernel \
69 : : */ \
70 : : (img)->shutdown = mask; \
71 : : if ((img)->shutdown != SK_SHUTDOWN__NONE) \
72 : : (img)->has_shutdown = true; \
73 : : } while (0)
74 : :
75 : : static inline int sk_decode_shutdown(int val)
76 : : {
77 : : static const int hows[] = {-1, SHUT_RD, SHUT_WR, SHUT_RDWR};
78 : 10 : return hows[val];
79 : : }
80 : :
81 : : #endif /* __CR_SOCKETS_H__ */
|