cinit
cinit();
struct g_gate_cinit cinit;
if (strlcpy(cinit.gc_path, path, sizeof(cinit.gc_path)) >=
sizeof(cinit.gc_path)) {
cinit.gc_flags = flags | direct_flag | dir;
cinit.gc_token = token;
cinit.gc_nconn = 2;
g_gate_swap2n_cinit(&cinit);
if (g_gate_send(sfd, &cinit, sizeof(cinit), MSG_NOSIGNAL) == -1) {
g_gate_swap2h_cinit(&cinit);
exports_check(struct ggd_export *ex, struct g_gate_cinit *cinit,
if ((cinit->gc_flags & GGATE_FLAG_RDONLY) != 0) {
} else if ((cinit->gc_flags & GGATE_FLAG_WRONLY) != 0) {
if ((cinit->gc_flags & GGATE_FLAG_DIRECT) != 0) {
exports_find(struct sockaddr *s, struct g_gate_cinit *cinit,
if (strcmp(cinit->gc_path, ex->e_path) != 0) {
error = exports_check(ex, cinit, conn);
connection_find(struct g_gate_cinit *cinit)
if (conn->c_token == cinit->gc_token)
connection_new(struct g_gate_cinit *cinit, struct sockaddr *s, int sfd)
conn->c_path = strdup(cinit->gc_path);
conn->c_token = cinit->gc_token;
if ((cinit->gc_flags & GGATE_FLAG_SEND) != 0)
conn->c_flags = cinit->gc_flags;
connection_add(struct ggd_connection *conn, struct g_gate_cinit *cinit,
if ((cinit->gc_flags & GGATE_FLAG_SEND) != 0) {
struct g_gate_cinit cinit;
data = g_gate_recv(sfd, &cinit, sizeof(cinit), MSG_WAITALL);
g_gate_swap2h_cinit(&cinit);
if (data != sizeof(cinit)) {
conn = connection_find(&cinit);
if (connection_add(conn, &cinit, from, sfd) == -1) {
conn = connection_new(&cinit, from, sfd);
ex = exports_find(from, &cinit, conn);
g_gate_swap2h_cinit(struct g_gate_cinit *cinit)
cinit->gc_flags = be64toh(cinit->gc_flags);
cinit->gc_nconn = be16toh(cinit->gc_nconn);
cinit->gc_token = be32toh(cinit->gc_token);
g_gate_swap2n_cinit(struct g_gate_cinit *cinit)
cinit->gc_flags = htobe64(cinit->gc_flags);
cinit->gc_nconn = htobe16(cinit->gc_nconn);
cinit->gc_token = htobe32(cinit->gc_token);
struct cdev *dev, *init, *lock, *cua, *cinit, *clock;
init = lock = cua = cinit = clock = NULL;
error = make_dev_s(&args, &cinit, "cua%s.init", name);
dev_depends(dev, cinit);
if (cinit)
destroy_dev(cinit);