1*134e1779SJakub Wojciech Klama /*
2*134e1779SJakub Wojciech Klama * Copyright 2016 Jakub Klama <jceel@FreeBSD.org>
3*134e1779SJakub Wojciech Klama * All rights reserved
4*134e1779SJakub Wojciech Klama *
5*134e1779SJakub Wojciech Klama * Redistribution and use in source and binary forms, with or without
6*134e1779SJakub Wojciech Klama * modification, are permitted providing that the following conditions
7*134e1779SJakub Wojciech Klama * are met:
8*134e1779SJakub Wojciech Klama * 1. Redistributions of source code must retain the above copyright
9*134e1779SJakub Wojciech Klama * notice, this list of conditions and the following disclaimer.
10*134e1779SJakub Wojciech Klama * 2. Redistributions in binary form must reproduce the above copyright
11*134e1779SJakub Wojciech Klama * notice, this list of conditions and the following disclaimer in the
12*134e1779SJakub Wojciech Klama * documentation and/or other materials provided with the distribution.
13*134e1779SJakub Wojciech Klama *
14*134e1779SJakub Wojciech Klama * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15*134e1779SJakub Wojciech Klama * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16*134e1779SJakub Wojciech Klama * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17*134e1779SJakub Wojciech Klama * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
18*134e1779SJakub Wojciech Klama * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19*134e1779SJakub Wojciech Klama * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20*134e1779SJakub Wojciech Klama * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21*134e1779SJakub Wojciech Klama * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
22*134e1779SJakub Wojciech Klama * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
23*134e1779SJakub Wojciech Klama * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24*134e1779SJakub Wojciech Klama * POSSIBILITY OF SUCH DAMAGE.
25*134e1779SJakub Wojciech Klama *
26*134e1779SJakub Wojciech Klama */
27*134e1779SJakub Wojciech Klama
28*134e1779SJakub Wojciech Klama #include <stdio.h>
29*134e1779SJakub Wojciech Klama #include <stdlib.h>
30*134e1779SJakub Wojciech Klama #include <fcntl.h>
31*134e1779SJakub Wojciech Klama #include <err.h>
32*134e1779SJakub Wojciech Klama #include <unistd.h>
33*134e1779SJakub Wojciech Klama #include "../lib9p.h"
34*134e1779SJakub Wojciech Klama #include "../backend/fs.h"
35*134e1779SJakub Wojciech Klama #include "../transport/socket.h"
36*134e1779SJakub Wojciech Klama
37*134e1779SJakub Wojciech Klama int
main(int argc,char ** argv)38*134e1779SJakub Wojciech Klama main(int argc, char **argv)
39*134e1779SJakub Wojciech Klama {
40*134e1779SJakub Wojciech Klama struct l9p_backend *fs_backend;
41*134e1779SJakub Wojciech Klama struct l9p_server *server;
42*134e1779SJakub Wojciech Klama char *host = "0.0.0.0";
43*134e1779SJakub Wojciech Klama char *port = "564";
44*134e1779SJakub Wojciech Klama char *path;
45*134e1779SJakub Wojciech Klama bool ro = false;
46*134e1779SJakub Wojciech Klama int rootfd;
47*134e1779SJakub Wojciech Klama int opt;
48*134e1779SJakub Wojciech Klama
49*134e1779SJakub Wojciech Klama while ((opt = getopt(argc, argv, "h:p:r")) != -1) {
50*134e1779SJakub Wojciech Klama switch (opt) {
51*134e1779SJakub Wojciech Klama case 'h':
52*134e1779SJakub Wojciech Klama host = optarg;
53*134e1779SJakub Wojciech Klama break;
54*134e1779SJakub Wojciech Klama case 'p':
55*134e1779SJakub Wojciech Klama port = optarg;
56*134e1779SJakub Wojciech Klama break;
57*134e1779SJakub Wojciech Klama case 'r':
58*134e1779SJakub Wojciech Klama ro = true;
59*134e1779SJakub Wojciech Klama break;
60*134e1779SJakub Wojciech Klama case '?':
61*134e1779SJakub Wojciech Klama default:
62*134e1779SJakub Wojciech Klama goto usage;
63*134e1779SJakub Wojciech Klama }
64*134e1779SJakub Wojciech Klama }
65*134e1779SJakub Wojciech Klama
66*134e1779SJakub Wojciech Klama if (optind >= argc) {
67*134e1779SJakub Wojciech Klama usage:
68*134e1779SJakub Wojciech Klama errx(1, "Usage: server [-h <host>] [-p <port>] [-r] <path>");
69*134e1779SJakub Wojciech Klama }
70*134e1779SJakub Wojciech Klama
71*134e1779SJakub Wojciech Klama path = argv[optind];
72*134e1779SJakub Wojciech Klama rootfd = open(path, O_DIRECTORY);
73*134e1779SJakub Wojciech Klama
74*134e1779SJakub Wojciech Klama if (rootfd < 0)
75*134e1779SJakub Wojciech Klama err(1, "cannot open root directory");
76*134e1779SJakub Wojciech Klama
77*134e1779SJakub Wojciech Klama if (l9p_backend_fs_init(&fs_backend, rootfd, ro) != 0)
78*134e1779SJakub Wojciech Klama err(1, "cannot init backend");
79*134e1779SJakub Wojciech Klama
80*134e1779SJakub Wojciech Klama if (l9p_server_init(&server, fs_backend) != 0)
81*134e1779SJakub Wojciech Klama err(1, "cannot create server");
82*134e1779SJakub Wojciech Klama
83*134e1779SJakub Wojciech Klama server->ls_max_version = L9P_2000L;
84*134e1779SJakub Wojciech Klama if (l9p_start_server(server, host, port))
85*134e1779SJakub Wojciech Klama err(1, "l9p_start_server() failed");
86*134e1779SJakub Wojciech Klama
87*134e1779SJakub Wojciech Klama /* XXX - we never get here, l9p_start_server does not return */
88*134e1779SJakub Wojciech Klama exit(0);
89*134e1779SJakub Wojciech Klama }
90