Commit 7f930250 authored by Pavel Emelyanov's avatar Pavel Emelyanov

page-server: Convert opts.addr into char *

We'll have --address argument reused for library, so make this
abstract address, not ipv4 one.
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 073af12d
...@@ -235,14 +235,11 @@ int main(int argc, char *argv[]) ...@@ -235,14 +235,11 @@ int main(int argc, char *argv[])
opts.use_page_server = true; opts.use_page_server = true;
break; break;
case 51: case 51:
if (!inet_aton(optarg, &opts.ps_addr.sin_addr)) { opts.addr = optarg;
pr_perror("Bad address");
return -1;
}
break; break;
case 52: case 52:
opts.ps_addr.sin_port = htons(atoi(optarg)); opts.ps_port = htons(atoi(optarg));
if (!opts.ps_addr.sin_port) { if (!opts.ps_port) {
pr_err("Bad port\n"); pr_err("Bad port\n");
return -1; return -1;
} }
......
...@@ -40,7 +40,8 @@ struct cr_options { ...@@ -40,7 +40,8 @@ struct cr_options {
struct list_head veth_pairs; struct list_head veth_pairs;
struct list_head scripts; struct list_head scripts;
bool use_page_server; bool use_page_server;
struct sockaddr_in ps_addr; unsigned short ps_port;
char *addr;
bool track_mem; bool track_mem;
char *img_parent; char *img_parent;
}; };
......
...@@ -222,16 +222,31 @@ static int page_server_serve(int sk) ...@@ -222,16 +222,31 @@ static int page_server_serve(int sk)
return ret; return ret;
} }
static int get_sockaddr_in(struct sockaddr_in *addr)
{
memset(addr, 0, sizeof(*addr));
addr->sin_family = AF_INET;
if (!opts.addr)
addr->sin_addr.s_addr = INADDR_ANY;
else if (!inet_aton(opts.addr, &addr->sin_addr)) {
pr_perror("Bad page server address");
return -1;
}
addr->sin_port = opts.ps_port;
return 0;
}
int cr_page_server(bool daemon_mode) int cr_page_server(bool daemon_mode)
{ {
int sk, ask = -1; int sk, ask = -1;
struct sockaddr_in caddr; struct sockaddr_in saddr, caddr;
socklen_t clen = sizeof(caddr); socklen_t clen = sizeof(caddr);
up_page_ids_base(); up_page_ids_base();
pr_info("Starting page server on port %u\n", pr_info("Starting page server on port %u\n", (int)ntohs(opts.ps_port));
(int)ntohs(opts.ps_addr.sin_port));
sk = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); sk = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sk < 0) { if (sk < 0) {
...@@ -239,8 +254,10 @@ int cr_page_server(bool daemon_mode) ...@@ -239,8 +254,10 @@ int cr_page_server(bool daemon_mode)
return -1; return -1;
} }
opts.ps_addr.sin_family = AF_INET; if (get_sockaddr_in(&saddr))
if (bind(sk, (struct sockaddr *)&opts.ps_addr, sizeof(opts.ps_addr))) { goto out;
if (bind(sk, (struct sockaddr *)&saddr, sizeof(saddr))) {
pr_perror("Can't bind page server"); pr_perror("Can't bind page server");
goto out; goto out;
} }
...@@ -277,12 +294,13 @@ static int page_server_sk = -1; ...@@ -277,12 +294,13 @@ static int page_server_sk = -1;
int connect_to_page_server(void) int connect_to_page_server(void)
{ {
struct sockaddr_in saddr;
if (!opts.use_page_server) if (!opts.use_page_server)
return 0; return 0;
pr_info("Connecting to server %s:%u\n", pr_info("Connecting to server %s:%u\n",
inet_ntoa(opts.ps_addr.sin_addr), opts.addr, (int)ntohs(opts.ps_port));
(int)ntohs(opts.ps_addr.sin_port));
page_server_sk = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); page_server_sk = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (page_server_sk < 0) { if (page_server_sk < 0) {
...@@ -290,9 +308,10 @@ int connect_to_page_server(void) ...@@ -290,9 +308,10 @@ int connect_to_page_server(void)
return -1; return -1;
} }
opts.ps_addr.sin_family = AF_INET; if (get_sockaddr_in(&saddr))
if (connect(page_server_sk, (struct sockaddr *)&opts.ps_addr, return -1;
sizeof(opts.ps_addr)) < 0) {
if (connect(page_server_sk, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
pr_perror("Can't connect to server"); pr_perror("Can't connect to server");
return -1; return -1;
} }
...@@ -313,8 +332,8 @@ int disconnect_from_page_server(void) ...@@ -313,8 +332,8 @@ int disconnect_from_page_server(void)
return 0; return 0;
pr_info("Disconnect from the page server %s:%u\n", pr_info("Disconnect from the page server %s:%u\n",
inet_ntoa(opts.ps_addr.sin_addr), opts.addr, (int)ntohs(opts.ps_port));
(int)ntohs(opts.ps_addr.sin_port));
if (write(page_server_sk, &pi, sizeof(pi)) != sizeof(pi)) { if (write(page_server_sk, &pi, sizeof(pi)) != sizeof(pi)) {
pr_perror("Can't write the fini command to server"); pr_perror("Can't write the fini command to server");
goto out; goto out;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment