almost working
authorMazet Laurent <laurent.mazet@thalesgroup.com>
Mon, 2 Jun 2025 14:05:52 +0000 (16:05 +0200)
committerMazet Laurent <laurent.mazet@thalesgroup.com>
Mon, 2 Jun 2025 14:05:52 +0000 (16:05 +0200)
mapec.c
mapec_valid.c
ulvpn.c

diff --git a/mapec.c b/mapec.c
index 3aec8a2286a07ba351704e1ff68d713cc4b0bc13..312a014b7b4a5174ae5576f199d08e0a2ca8c173 100644 (file)
--- a/mapec.c
+++ b/mapec.c
@@ -151,6 +151,7 @@ int parse_address (struct sockaddr_in *addr, char *url)
     } else {
         addr->sin_addr.s_addr = INADDR_ANY;
     }
+
     free (hostname);
 
     return 0;
@@ -168,6 +169,7 @@ int connect_udp (MAPEC_addr_t *mapec, char *local_address, char *remote_address)
         errno = EINVAL;
         return -1;
     }
+    VERBOSE (mapec, DEBUG, PRINTF ("local address -> 0x%08x\n", ntohl (mapec->addrin.sin_addr.s_addr)));
     VERBOSE (mapec, DEBUG, PRINTF ("local port -> %d\n", ntohs (mapec->addrin.sin_port)));
 
     /* parse remote url */
@@ -177,6 +179,7 @@ int connect_udp (MAPEC_addr_t *mapec, char *local_address, char *remote_address)
         errno = EINVAL;
         return -1;
     }
+    VERBOSE (mapec, DEBUG, PRINTF ("remote address -> 0x%08x\n", ntohl (mapec->addrout.sin_addr.s_addr)));
     VERBOSE (mapec, DEBUG, PRINTF ("remote port -> %d\n", ntohs (mapec->addrout.sin_port)));
 
     /* create socket */
@@ -218,6 +221,8 @@ int connect_tun (MAPEC_addr_t *mapec, char *device_name, char *ip_address)
         return -1;
     }
 
+    VERBOSE (mapec, INFO, PRINTF ("parse URL -> %s %s\n", device_name, ip_address));
+
     /* link to named device */
     struct ifreq ifr = { 0 };
     ifr.ifr_flags = IFF_TUN | IFF_NO_PI;
index 14706a2dc8b657f3637bc868fdf91f37f02064f4..0f1851b1a1d6592051faad7f55f86f77722bc4a1 100644 (file)
@@ -303,7 +303,7 @@ int main (int argc, char **argv)
             if (comm->serv == NULL) {
                 comm->serv = strdup (serv);
             }
-            if (mode == reverse) {
+            if (mode == 0) {
                 free (comm->rxurl);
                 comm->rxurl = strdup (url);
             } else {
diff --git a/ulvpn.c b/ulvpn.c
index ea574d6d6466725c9c787cde381d44e8beb3652b..56d04575bdc02914a6e9b528c0a234b11c1849e6 100644 (file)
--- a/ulvpn.c
+++ b/ulvpn.c
@@ -31,10 +31,10 @@ char *progname = NULL;
 char *version = "0.1";
 
 char *devtun = "tun://tun0";
-char *loctun = "tun://1.2.0.1";
-char *remtun = "tun://1.2.0.2";
-char *locudp = "udp:///1.1.0.1:1234";
-char *remudp = "udp://1.1.0.2:1234";
+char *loctun = "tun://10.2.0.1";
+char *remtun = "tun://10.2.0.2";
+char *locudp = "udp://10.1.0.1:1234";
+char *remudp = "udp://10.1.0.2:1235";
 
 int stop = 0;
 
@@ -42,15 +42,16 @@ int stop = 0;
 
 #define MAXPAYLOAD 1500
 
+DECLARE_VERBOSE_LEVEL (ulvpn, INFO);
+
 void sig_handler (int sig)
 {
     switch (sig) {
     case SIGINT:
-        //stop = 1;
         exit (0);
         break;
     case SIGTERM:
-        exit (0);
+        stop = 1;
         break;
     }
 }
@@ -64,9 +65,11 @@ void usage (void)
     printf (" -r: remote tun (%s)\n", remtun);
     printf (" -t: local udp (%s)\n", locudp);
     printf (" -u: remote udp (%s)\n", remudp);
-    printf (" -v: verbose level [%d..%d] (%d)\n", ERROR, TRACE, verbose);
+    printf (" -v: program verbose level [%d..%d] (%d)\n", ERROR, TRACE, GET_VERBOSE_LEVEL (ulvpn));
+    printf (" -V: library verbose level [%d..%d] (%d)\n", ERROR, TRACE, GET_VERBOSE_LEVEL (mapec));
     printf ("%s version %s\n", progname, version);
-'
+}
+
 int main (int argc, char **argv)
 {
 
@@ -83,15 +86,15 @@ int main (int argc, char **argv)
     while (argc-- > 1) {
         char *arg = *(++argv);
         if (arg[0] != '-') {
-            filename = arg;
-            continue;
+            usage ();
+            return 1;
         }
         char c = arg[1];
         switch (c) {
         case 'd':
             arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
             if (arg == NULL) {
-                VERBOSE (mapec, ERROR, PRINTF ("%s: dev tun not specified\n", progname));
+                VERBOSE (ulvpn, ERROR, PRINTF ("%s: dev tun not specified\n", progname));
                 return 1;
             }
             devtun = arg;
@@ -99,7 +102,7 @@ int main (int argc, char **argv)
         case 'l':
             arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
             if (arg == NULL) {
-                VERBOSE (mapec, ERROR, PRINTF ("%s: local tun not specified\n", progname));
+                VERBOSE (ulvpn, ERROR, PRINTF ("%s: local tun not specified\n", progname));
                 return 1;
             }
             loctun = arg;
@@ -107,7 +110,7 @@ int main (int argc, char **argv)
         case 'r':
             arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
             if (arg == NULL) {
-                VERBOSE (mapec, ERROR, PRINTF ("%s: remove tun not specified\n", progname));
+                VERBOSE (ulvpn, ERROR, PRINTF ("%s: remove tun not specified\n", progname));
                 return 1;
             }
             remtun = arg;
@@ -115,7 +118,7 @@ int main (int argc, char **argv)
         case 't':
             arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
             if (arg == NULL) {
-                VERBOSE (mapec, ERROR, PRINTF ("%s: local udp not specified\n", progname));
+                VERBOSE (ulvpn, ERROR, PRINTF ("%s: local udp not specified\n", progname));
                 return 1;
             }
             locudp = arg;
@@ -123,7 +126,7 @@ int main (int argc, char **argv)
         case 'u':
             arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
             if (arg == NULL) {
-                VERBOSE (mapec, ERROR, PRINTF ("%s: remove udp not specified\n", progname));
+                VERBOSE (ulvpn, ERROR, PRINTF ("%s: remove udp not specified\n", progname));
                 return 1;
             }
             remudp = arg;
@@ -131,7 +134,15 @@ int main (int argc, char **argv)
         case 'v':
             arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
             if (arg == NULL) {
-                VERBOSE (mapec, ERROR, PRINTF ("%s: verbose level not specified\n", progname));
+                VERBOSE (ulvpn, ERROR, PRINTF ("%s: verbose level not specified\n", progname));
+                return 1;
+            }
+            CHANGE_VERBOSE_LEVEL (ulvpn, atoi (arg));
+            break;
+        case 'V':
+            arg = (arg[2]) ? arg + 2 : (--argc > 0) ? *(++argv) : NULL;
+            if (arg == NULL) {
+                VERBOSE (ulvpn, ERROR, PRINTF ("%s: verbose level not specified\n", progname));
                 return 1;
             }
             CHANGE_VERBOSE_LEVEL (mapec, atoi (arg));
@@ -144,14 +155,14 @@ int main (int argc, char **argv)
     }
 
     /* init communication channel */
-    int tun_fd = MAPEC_Connect (devtun, locudp);
-    if (tun_fd > 0) {
-        VERBOSE (mapec, ERROR, PRINTF ("can't open communication for %s %s\n", devtun, loctun));
+    int tun_fd = MAPEC_Connect (devtun, loctun);
+    if (tun_fd < 0) {
+        VERBOSE (ulvpn, ERROR, PRINTF ("can't open communication for %s %s\n", devtun, loctun));
         return -1;
     }
     int udp_fd = MAPEC_Connect (locudp, remudp);
-    if (udp_fd > 0) {
-        VERBOSE (mapec, ERROR, PRINTF ("can't open communication for %s %s\n", locudp, remudp));
+    if (udp_fd < 0) {
+        VERBOSE (ulvpn, ERROR, PRINTF ("can't open communication for %s %s\n", locudp, remudp));
         return -1;
     }
 
@@ -160,7 +171,9 @@ int main (int argc, char **argv)
     signal(SIGTERM, sig_handler);
 
     /* main loop */
-    while (stop) {
+    int rc;
+    while (!stop) {
+        rc = 2;
 
         fd_set readset;
         FD_ZERO (&readset);
@@ -174,52 +187,61 @@ int main (int argc, char **argv)
         }
 
         uint8_t buffer[MAXPAYLOAD] = {0};
-        int len = 0;
 
         if (FD_ISSET (tun_fd, &readset)) {
-            int r = MAPEC_Receive (tun_fd, buffer, &len);
+            int r = MAPEC_Receive (tun_fd, buffer, sizeof (buffer));
             if (r < 0) {
                 // TODO: ignore some errno
                 VERBOSE (ulvpn, ERROR, PRINTF ("error when receiving from tun\n"));
-                break;
-            }
-
-            //encrypt it
-
-            r = MAPEC_Send (udp_fs, buffer, r);
-            if (r < 0) {
-                // TODO: ignore some errno
-                VERBOSE (ulvpn, ERROR, PRINTF ("error when sending to udp\n"));
-                break;
+                //break;
+            } else {
+                VERBOSE (ulvpn, DEBUG, PRINTF ("received from tun %d bytes\n", r));
+
+                //encrypt it
+
+                r = MAPEC_Send (udp_fd, buffer, r);
+                if (r < 0) {
+                    // TODO: ignore some errno
+                    VERBOSE (ulvpn, ERROR, PRINTF ("error when sending to udp\n"));
+                    //break;
+                } else {
+                    VERBOSE (ulvpn, DEBUG, PRINTF ("sent to udp %d bytes\n", r));
+                }
             }
 
         } else if (FD_ISSET (udp_fd, &readset)) {
-            int r = MAPEC_Receive (udp_fd, buffer, &len);
+            int r = MAPEC_Receive (udp_fd, buffer, sizeof (buffer));
             if (r < 0) {
                 // TODO: ignore some errno
                 VERBOSE (ulvpn, ERROR, PRINTF ("error when receiving from udp\n"));
-                break;
-            }
-
-            //decrypt it
-
-            r = MAPEC_Send (tun_fs, buffer, r);
-            if (r < 0) {
-                // TODO: ignore some errno
-                VERBOSE (ulvpn, ERROR, PRINTF ("error when sending to tun\n"));
-                break;
+                //break;
+            } else {
+                VERBOSE (ulvpn, DEBUG, PRINTF ("received from udp %d bytes\n", r));
+
+                //decrypt it
+
+                r = MAPEC_Send (tun_fd, buffer, r);
+                if (r < 0) {
+                    // TODO: ignore some errno
+                    VERBOSE (ulvpn, ERROR, PRINTF ("error when sending to tun\n"));
+                    //break;
+                } else {
+                    VERBOSE (ulvpn, DEBUG, PRINTF ("sent to tun %d bytes\n", r));
+                }
             }
         } else {
             VERBOSE (ulvpn, ERROR, PRINTF ("select error\n"));
             break;
         }
+
+        rc = 0;
     }
 
     /* cleaning */
     close (tun_fd);
     close (udp_fd);
 
-    return rc + GET_VERBOSE_ERRORS (mapec);
+    return rc;
 }
 
 /* test: mapec_valid.exe -h | grep usage */