FreeBSD porting and IMSI bugfix
diff --git a/gtp/gtp.c b/gtp/gtp.c
index 899a16a..45b4386 100644
--- a/gtp/gtp.c
+++ b/gtp/gtp.c
@@ -407,6 +407,9 @@
   memset(&addr, 0, sizeof(addr));
   addr.sin_family = AF_INET;
   addr.sin_addr = *inetaddr;
+#ifdef __FreeBSD__
+  addr.sin_len = sizeof(addr);
+#endif
 
   if ((packet->flags & 0xe0) == 0x00) { /* Version 0 */
     addr.sin_port = htons(GTP0_PORT);
@@ -763,6 +766,9 @@
   addr.sin_family = AF_INET;
   addr.sin_addr = *listen;  /* Same IP for user traffic and signalling*/
   addr.sin_port = htons(GTP0_PORT);
+#ifdef __FreeBSD__
+  addr.sin_len = sizeof(addr);
+#endif
   
   if (bind((*gsn)->fd0, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
     (*gsn)->err_socket++;
@@ -781,6 +787,9 @@
   addr.sin_family = AF_INET;
   addr.sin_addr = *listen;  /* Same IP for user traffic and signalling*/
   addr.sin_port = htons(GTP1C_PORT);
+#ifdef __FreeBSD__
+  addr.sin_len = sizeof(addr);
+#endif
   
   if (bind((*gsn)->fd1c, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
     (*gsn)->err_socket++;
@@ -799,6 +808,9 @@
   addr.sin_family = AF_INET;
   addr.sin_addr = *listen;  /* Same IP for user traffic and signalling*/
   addr.sin_port = htons(GTP1U_PORT);
+#ifdef __FreeBSD__
+  addr.sin_len = sizeof(addr);
+#endif
   
   if (bind((*gsn)->fd1u, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
     (*gsn)->err_socket++;
@@ -2932,6 +2944,10 @@
 
   memset(&addr, 0, sizeof(addr));
   addr.sin_family = AF_INET;
+#ifdef __FreeBSD__
+  addr.sin_len = sizeof(addr);
+#endif
+
   memcpy(&addr.sin_addr, pdp->gsnru.v,pdp->gsnru.l); /* TODO range check */
 
   if (pdp->version == 0) {