DF-0597 / connect_test.c
/* Tiny connect test for ng_pptpgre session hook */ #include <sys/param.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <unistd.h> #include <netgraph.h> #define NGM_GENERIC_COOKIE 851672668 #define NGM_MKPEER 2 #define NGM_NAME 4 #define NGM_CONNECT 3 #define NGM_RMHOOK 5 int main(int argc, char **argv) { int cs, ds; char pname[32]; snprintf(pname, sizeof(pname), "tp%d", getpid()); if (NgMkSockNode("testctl", &cs, &ds) < 0) { perror("NgMkSockNode"); return 1; } /* mkpeer pptpgre upper */ struct { char type[32], ourhook[32], peerhook[32]; } mkp; memset(&mkp, 0, sizeof(mkp)); snprintf(mkp.type, sizeof(mkp.type), "pptpgre"); snprintf(mkp.ourhook, sizeof(mkp.ourhook), "dl1"); snprintf(mkp.peerhook, sizeof(mkp.peerhook), "upper"); if (NgSendMsg(cs, ".", NGM_GENERIC_COOKIE, NGM_MKPEER, &mkp, sizeof(mkp)) < 0) { fprintf(stderr, "mkpeer pptpgre: %s\n", strerror(errno)); return 1; } fprintf(stderr, "mkpeer OK\n"); /* name .:dl1 -> pname */ struct { char name[32]; } nm; memset(&nm, 0, sizeof(nm)); snprintf(nm.name, sizeof(nm.name), "%s", pname); if (NgSendMsg(cs, ".:dl1", NGM_GENERIC_COOKIE, NGM_NAME, &nm, sizeof(nm)) < 0) { fprintf(stderr, "name: %s\n", strerror(errno)); return 1; } fprintf(stderr, "name OK -> %s\n", pname); /* ksocket lower */ memset(&mkp, 0, sizeof(mkp)); snprintf(mkp.type, sizeof(mkp.type), "ksocket"); snprintf(mkp.ourhook, sizeof(mkp.ourhook), "lower"); snprintf(mkp.peerhook, sizeof(mkp.peerhook), "inet/raw/gre"); char ppath[64]; snprintf(ppath, sizeof(ppath), "%s:", pname); if (NgSendMsg(cs, ppath, NGM_GENERIC_COOKIE, NGM_MKPEER, &mkp, sizeof(mkp)) < 0) { fprintf(stderr, "mkpeer ksocket: %s\n", strerror(errno)); return 1; } fprintf(stderr, "ksocket lower OK\n"); /* now connect: my socket dl_sess <-> p1:session_0001 */ struct { char path[512], ourhook[32], peerhook[32]; } con; memset(&con, 0, sizeof(con)); snprintf(con.path, sizeof(con.path), "%s", ppath); snprintf(con.ourhook, sizeof(con.ourhook), "dl_sess"); snprintf(con.peerhook, sizeof(con.peerhook), "session_0001"); if (NgSendMsg(cs, ".", NGM_GENERIC_COOKIE, NGM_CONNECT, &con, sizeof(con)) < 0) { fprintf(stderr, "connect session_0001: %s (errno=%d)\n", strerror(errno), errno); return 1; } fprintf(stderr, "connect session_0001 OK\n"); return 0; } |