From 65570d9559ede76c233aaacf25ba8cde1a697006 Mon Sep 17 00:00:00 2001 From: Cyrill Gorcunov Date: Fri, 13 Jul 2012 21:05:00 +0400 Subject: [PATCH] sockets, inet: Use inet_sk_entry as a reference in inet_sk_info For PB transition. Signed-off-by: Cyrill Gorcunov Signed-off-by: Pavel Emelyanov --- include/sk-inet.h | 2 +- netfilter.c | 4 +-- sk-inet.c | 76 +++++++++++++++++++++++++---------------------- sk-tcp.c | 4 +-- 4 files changed, 45 insertions(+), 41 deletions(-) diff --git a/include/sk-inet.h b/include/sk-inet.h index 7c0566c4d..6a9ccb082 100644 --- a/include/sk-inet.h +++ b/include/sk-inet.h @@ -20,7 +20,7 @@ struct inet_sk_desc { }; struct inet_sk_info { - struct inet_sk_entry ie; + struct inet_sk_entry *ie; struct file_desc d; struct list_head rlist; }; diff --git a/netfilter.c b/netfilter.c index a67591f37..69d59438c 100644 --- a/netfilter.c +++ b/netfilter.c @@ -72,6 +72,6 @@ int nf_unlock_connection(struct inet_sk_desc *sk) int nf_unlock_connection_info(struct inet_sk_info *si) { - return nf_connection_switch_raw(si->ie.src_addr, si->ie.src_port, - si->ie.dst_addr, si->ie.dst_port, 0); + return nf_connection_switch_raw(si->ie->src_addr, si->ie->src_port, + si->ie->dst_addr, si->ie->dst_port, 0); } diff --git a/sk-inet.c b/sk-inet.c index b897313d7..c77443521 100644 --- a/sk-inet.c +++ b/sk-inet.c @@ -264,10 +264,10 @@ static u32 zero_addr[4]; static bool is_bound(struct inet_sk_info *ii) { BUILD_BUG_ON(sizeof(zero_addr) < - max(sizeof(ii->ie.dst_addr), sizeof(ii->ie.src_addr))); + max(sizeof(ii->ie->dst_addr), sizeof(ii->ie->src_addr))); - return memcmp(zero_addr, ii->ie.src_addr, sizeof(ii->ie.src_addr)) || - memcmp(zero_addr, ii->ie.dst_addr, sizeof(ii->ie.dst_addr)); + return memcmp(zero_addr, ii->ie->src_addr, sizeof(ii->ie->src_addr)) || + memcmp(zero_addr, ii->ie->dst_addr, sizeof(ii->ie->dst_addr)); } @@ -293,13 +293,17 @@ int collect_inet_sockets(void) if (!ii) break; - ret = read_img_eof(fd, &ii->ie); + ii->ie = xmalloc(sizeof(*ii->ie)); + if (!ii->ie) + break; + + ret = read_img_eof(fd, ii->ie); if (ret <= 0) break; - file_desc_add(&ii->d, ii->ie.id, &inet_desc_ops); + file_desc_add(&ii->d, ii->ie->id, &inet_desc_ops); - if (tcp_connection(&ii->ie)) + if (tcp_connection(ii->ie)) tcp_locked_conn_add(ii); } @@ -317,25 +321,25 @@ static int open_inet_sk(struct file_desc *d) ii = container_of(d, struct inet_sk_info, d); - show_one_inet_img("Restore", &ii->ie); + show_one_inet_img("Restore", ii->ie); - if (ii->ie.family != AF_INET && ii->ie.family != AF_INET6) { - pr_err("Unsupported socket family: %d\n", ii->ie.family); + if (ii->ie->family != AF_INET && ii->ie->family != AF_INET6) { + pr_err("Unsupported socket family: %d\n", ii->ie->family); return -1; } - if ((ii->ie.type != SOCK_STREAM) && (ii->ie.type != SOCK_DGRAM)) { - pr_err("Unsupported socket type: %d\n", ii->ie.type); + if ((ii->ie->type != SOCK_STREAM) && (ii->ie->type != SOCK_DGRAM)) { + pr_err("Unsupported socket type: %d\n", ii->ie->type); return -1; } - sk = socket(ii->ie.family, ii->ie.type, ii->ie.proto); + sk = socket(ii->ie->family, ii->ie->type, ii->ie->proto); if (sk < 0) { pr_perror("Can't create unix socket"); return -1; } - if (tcp_connection(&ii->ie)) { + if (tcp_connection(ii->ie)) { if (!opts.tcp_established_ok) { pr_err("Connected TCP socket in image\n"); goto err; @@ -357,26 +361,26 @@ static int open_inet_sk(struct file_desc *d) goto err; } - if (ii->ie.state == TCP_LISTEN) { - if (ii->ie.proto != IPPROTO_TCP) { - pr_err("Wrong socket in listen state %d\n", ii->ie.proto); + if (ii->ie->state == TCP_LISTEN) { + if (ii->ie->proto != IPPROTO_TCP) { + pr_err("Wrong socket in listen state %d\n", ii->ie->proto); goto err; } - if (listen(sk, ii->ie.backlog) == -1) { + if (listen(sk, ii->ie->backlog) == -1) { pr_perror("Can't listen on a socket"); goto err; } } - if (ii->ie.state == TCP_ESTABLISHED && + if (ii->ie->state == TCP_ESTABLISHED && inet_connect(sk, ii)) goto err; done: - if (rst_file_params(sk, &ii->ie.fown, ii->ie.flags)) + if (rst_file_params(sk, &ii->ie->fown, ii->ie->flags)) goto err; - if (restore_socket_opts(sk, &ii->ie.opts)) + if (restore_socket_opts(sk, &ii->ie->opts)) return -1; return sk; @@ -395,15 +399,15 @@ int inet_bind(int sk, struct inet_sk_info *ii) int addr_size; memzero(&addr, sizeof(addr)); - if (ii->ie.family == AF_INET) { - addr.v4.sin_family = ii->ie.family; - addr.v4.sin_port = htons(ii->ie.src_port); - memcpy(&addr.v4.sin_addr.s_addr, ii->ie.src_addr, sizeof(ii->ie.src_addr)); + if (ii->ie->family == AF_INET) { + addr.v4.sin_family = ii->ie->family; + addr.v4.sin_port = htons(ii->ie->src_port); + memcpy(&addr.v4.sin_addr.s_addr, ii->ie->src_addr, sizeof(ii->ie->src_addr)); addr_size = sizeof(addr.v4); - } else if (ii->ie.family == AF_INET6) { - addr.v6.sin6_family = ii->ie.family; - addr.v6.sin6_port = htons(ii->ie.src_port); - memcpy(&addr.v6.sin6_addr.s6_addr, ii->ie.src_addr, sizeof(ii->ie.src_addr)); + } else if (ii->ie->family == AF_INET6) { + addr.v6.sin6_family = ii->ie->family; + addr.v6.sin6_port = htons(ii->ie->src_port); + memcpy(&addr.v6.sin6_addr.s6_addr, ii->ie->src_addr, sizeof(ii->ie->src_addr)); addr_size = sizeof(addr.v6); } else BUG_ON(1); @@ -425,17 +429,17 @@ int inet_connect(int sk, struct inet_sk_info *ii) int addr_size; memzero(&addr, sizeof(addr)); - if (ii->ie.family == AF_INET) { - addr.v4.sin_family = ii->ie.family; - addr.v4.sin_port = htons(ii->ie.dst_port); + if (ii->ie->family == AF_INET) { + addr.v4.sin_family = ii->ie->family; + addr.v4.sin_port = htons(ii->ie->dst_port); memcpy(&addr.v4.sin_addr.s_addr, - ii->ie.dst_addr, sizeof(ii->ie.dst_addr)); + ii->ie->dst_addr, sizeof(ii->ie->dst_addr)); addr_size = sizeof(addr.v4); - } else if (ii->ie.family == AF_INET6) { - addr.v6.sin6_family = ii->ie.family; - addr.v6.sin6_port = htons(ii->ie.dst_port); + } else if (ii->ie->family == AF_INET6) { + addr.v6.sin6_family = ii->ie->family; + addr.v6.sin6_port = htons(ii->ie->dst_port); memcpy(&addr.v6.sin6_addr.s6_addr, - ii->ie.dst_addr, sizeof(ii->ie.dst_addr)); + ii->ie->dst_addr, sizeof(ii->ie->dst_addr)); addr_size = sizeof(addr.v6); } else BUG_ON(1); diff --git a/sk-tcp.c b/sk-tcp.c index 68526dcff..76355d19a 100644 --- a/sk-tcp.c +++ b/sk-tcp.c @@ -436,9 +436,9 @@ static int restore_tcp_conn_state(int sk, struct inet_sk_info *ii) int ifd; struct tcp_stream_entry tse; - pr_info("Restoring TCP connection id %x ino %x\n", ii->ie.id, ii->ie.ino); + pr_info("Restoring TCP connection id %x ino %x\n", ii->ie->id, ii->ie->ino); - ifd = open_image_ro(CR_FD_TCP_STREAM, ii->ie.id); + ifd = open_image_ro(CR_FD_TCP_STREAM, ii->ie->id); if (ifd < 0) goto err;