hi everyone

i cleaned up the patch to pptp and put up a new pptp-mulix-0.06.tar.gz
at http://www.pointer.co.il/~mulix/
ADSL users, and especially alcatel and orckit ATUR3 users, please test
and verify that it works for you.

as soon as i get positive test results i will forward the patch onwards
to the pptp maintainer and hopefully get it incorporated into the main
pptp tree.

patch attached below
--
mulix
http://www.advogato.com/person/mulix

linux/reboot.h: #define LINUX_REBOOT_MAGIC1 0xfee1dead
diff -u -r -b pptp-linux-1.0.2/Makefile pptp-mulix/Makefile
--- pptp-linux-1.0.2/Makefile   Thu Feb 19 00:42:14 1998
+++ pptp-mulix/Makefile Sat Feb  3 16:04:43 2001
@@ -1,10 +1,11 @@
 VERSION = 1.0.2
 VERSION_DEFINE = '-DPPTP_LINUX_VERSION="${VERSION}"'
+PROTOCOL_DEFINE = '-DPPTP_BEZEQ_ISRAEL=1'
 
 CC     = gcc -Wall
 DEBUG  = -g
 INCLUDE =
-CFLAGS  = -O9 $(VERSION_DEFINE) $(DEBUG) $(INCLUDE)
+CFLAGS  = -O9 $(VERSION_DEFINE) $(PROTOCOL_DEFINE) $(DEBUG) $(INCLUDE) 
 LIBS   =
 LDFLAGS        =
 
@@ -36,7 +37,7 @@
        $(CC) -o vector_test vector_test.o vector.o
 
 clean:
-       $(RM) *.o *~
+       $(RM) *.o *~ $(PPTP_BIN) $(CALLMGR_BIN) core
 
 clobber: clean
        $(RM) $(PPTP_BIN) $(CALLMGR_BIN) vector_test
Only in pptp-mulix/: pptp-linux-1.0.2-mulix.diff
diff -u -r -b pptp-linux-1.0.2/pptp.c pptp-mulix/pptp.c
--- pptp-linux-1.0.2/pptp.c     Thu Feb 19 00:42:14 1998
+++ pptp-mulix/pptp.c   Tue Jan 16 23:57:02 2001
@@ -1,6 +1,7 @@
 /* pptp.c ... client shell to launch call managers, data handlers, and
  *            the pppd from the command line.
  *            C. Scott Ananian <[EMAIL PROTECTED]>
+ *            patched by mulix <[EMAIL PROTECTED]>
  *
  * $Id: pptp.c,v 1.7 1997/12/16 11:38:48 cananian Exp $
  */
@@ -40,6 +41,7 @@
 void usage(char *progname) {
   fprintf(stderr,
          "%s\n"
+         "patched by mulix <[EMAIL PROTECTED]>\n"
         "Usage:\n"
         " %s hostname [pppd options]\n", version, progname);
   exit(1);
@@ -69,6 +71,7 @@
     usage(argv[0]);
 
   /* Step 1: Get IP address for the hostname in argv[1] */
+  log("trying to connect to '%s'\n", argv[1]);
   inetaddr = get_ip_address(argv[1]);
 
   /* Step 2: Open connection to call manager
diff -u -r -b pptp-linux-1.0.2/pptp_callmgr.c pptp-mulix/pptp_callmgr.c
--- pptp-linux-1.0.2/pptp_callmgr.c     Thu Feb 19 00:42:14 1998
+++ pptp-mulix/pptp_callmgr.c   Wed Jan 17 00:11:02 2001
@@ -186,6 +186,7 @@
       struct local_callinfo *lci;
       int s;
 
+      log("new call!");
       /* Accept the socket */
       if ((s = accept(unix_sock, (struct sockaddr *) &from, &len))<0) {
        warn("Socket not accepted: %s", strerror(errno));
diff -u -r -b pptp-linux-1.0.2/pptp_ctrl.c pptp-mulix/pptp_ctrl.c
--- pptp-linux-1.0.2/pptp_ctrl.c        Thu Feb 19 00:42:14 1998
+++ pptp-mulix/pptp_ctrl.c      Sat Feb  3 16:02:39 2001
@@ -206,10 +206,15 @@
   {
     struct pptp_out_call_rqst packet = {
       PPTP_HEADER_CTRL(PPTP_OUT_CALL_RQST),
-      hton16(call->call_id), hton16(call->sernum),
+      0, /* hton16(call->callid) */
+      0, /* hton16(call->sernum) */
       hton32(PPTP_BPS_MIN), hton32(PPTP_BPS_MAX),
+#ifndef PPTP_BEZEQ_ISRAEL
       hton32(PPTP_BEARER_CAP), hton32(PPTP_FRAME_CAP), 
-      hton16(PPTP_WINDOW), 0, 0, 0, {0}, {0}
+#else
+      hton32(PPTP_BEARER_DIGITAL), hton32(PPTP_FRAME_ANY),
+#endif
+      hton16(PPTP_WINDOW), 0, hton16(PPTP_HOSTNAME_LEN),0, PPTP_HOSTNAME, {0}
     };
     if (pptp_send_ctrl_packet(conn, &packet, sizeof(packet))) {
       pptp_reset_timer();
@@ -458,6 +463,22 @@
   }
 }
 
+static void
+pptp_set_link(PPTP_CONN* conn, int peer_call_id)
+{
+     struct pptp_set_link_info packet = {
+         PPTP_HEADER_CTRL(PPTP_SET_LINK_INFO),
+         hton16(peer_call_id),
+         0,
+         0xffffffff,
+         0xffffffff};
+     
+     if (pptp_send_ctrl_packet(conn, &packet, sizeof(packet))) {
+         log("pptp_set_link() packet sending succesfull");
+         pptp_reset_timer();
+     }
+}
+
 void pptp_dispatch_ctrl_packet(PPTP_CONN * conn, void * buffer, size_t size) {
   struct pptp_header *header = (struct pptp_header *)buffer;
   u_int8_t close_reason = PPTP_STOP_NONE;
@@ -513,7 +534,10 @@
          close_reason = PPTP_STOP_PROTOCOL;
          goto pptp_conn_close;
        }
-       if (ntoh8(packet->result_code)!=1) { /* some problem with start */
+       /* alcatel modems in used israel require this change to function correctly*/
+       /* QUESTION: result code 0 does not appear in pptp-draft ? */
+       if ((ntoh8(packet->result_code)!=1) && (ntoh8(packet->result_code)!=0)){ 
+          /*some problem with start */ 
          /* if result_code == 5, we might fall back to different version */
          if (conn->callback!=NULL) conn->callback(conn, CONN_OPEN_FAIL);
          close_reason = PPTP_STOP_PROTOCOL;
@@ -623,7 +647,8 @@
        /* check for errors */
        if (packet->result_code!=1) {
          /* An error.  Log it. */
-         log("Error opening call. [callid %d]", (int) callid);
+         log("Error '%d' opening call. [callid %d]", packet->result_code, (int) 
+callid);
+         log("Error code is '%d', Cause code is '%d'", packet->error_code, 
+packet->cause_code);
          call->state.pns = PNS_IDLE;
          if (call->callback!=NULL) call->callback(conn, call, CALL_OPEN_FAIL);
          pptp_call_destroy(conn, call);
@@ -633,6 +658,8 @@
          call->peer_call_id = ntoh16(packet->call_id);
          call->speed        = ntoh32(packet->speed);
          pptp_reset_timer();
+         log("calling pptp_set_link()");
+         pptp_set_link(conn, call->peer_call_id);
          if (call->callback!=NULL) call->callback(conn, call, CALL_OPEN_DONE);
          log("Outgoing call established.\n");
        }
diff -u -r -b pptp-linux-1.0.2/pptp_gre.c pptp-mulix/pptp_gre.c
--- pptp-linux-1.0.2/pptp_gre.c Thu Feb 19 00:42:14 1998
+++ pptp-mulix/pptp_gre.c       Sat Feb  3 14:38:56 2001
@@ -59,7 +59,8 @@
   struct sockaddr_in src_addr;
   int s, n, stat1, stat2;
 
-  pptp_gre_call_id = call_id;
+  /* the orckit ATUR3 modem used in israel requires this change to work correctly */
+  pptp_gre_call_id = peer_call_id;
   /* Open IP protocol socket */
   s = socket(AF_INET, SOCK_RAW, PPTP_PROTO);
   if (s<0) { warn("socket: %s", strerror(errno)); return; }
diff -u -r -b pptp-linux-1.0.2/pptp_options.h pptp-mulix/pptp_options.h
--- pptp-linux-1.0.2/pptp_options.h     Thu Feb 19 00:42:14 1998
+++ pptp-mulix/pptp_options.h   Sat Feb  3 16:07:24 2001
@@ -18,22 +18,33 @@
 #define PPTP_BPS_MIN 2400
 #define PPTP_BPS_MAX 10000000
 
-#ifndef STANDARD
-#define PPTP_MAX_CHANNELS 65535
-#define PPTP_FIRMWARE_STRING "0.01"
-#define PPTP_FIRMWARE_VERSION 0x001
-#define PPTP_HOSTNAME {'l','o','c','a','l',0}
-#define PPTP_VENDOR   {'c','a','n','a','n','i','a','n',0}
-#define PPTP_FRAME_CAP  PPTP_FRAME_ANY
-#define PPTP_BEARER_CAP PPTP_BEARER_DIGITAL
-#else
+#ifdef STANDARD
 #define PPTP_MAX_CHANNELS 5
 #define PPTP_FIRMWARE_STRING "0.01"
 #define PPTP_FIRMWARE_VERSION 0
 #define PPTP_HOSTNAME {'l','o','c','a','l',0}
+#define PPTP_HOSTNAME_LEN 5
 #define PPTP_VENDOR   {'N','T',0}
 #define PPTP_FRAME_CAP  2
 #define PPTP_BEARER_CAP 1
+#elif defined PPTP_BEZEQ_ISRAEL
+#define PPTP_MAX_CHANNELS 0
+#define PPTP_FIRMWARE_STRING "0x6021"
+#define PPTP_FIRMWARE_VERSION 0x6021
+#define PPTP_HOSTNAME {'R','E','L','A','Y','_','P','P','P','1',0}
+#define PPTP_HOSTNAME_LEN 10
+#define PPTP_VENDOR   {'M','S',' ','W','i','n',' ','N','T',0}
+#define PPTP_FRAME_CAP  PPTP_FRAME_ASYNC
+#define PPTP_BEARER_CAP PPTP_BEARER_ANALOG
+#else
+#define PPTP_MAX_CHANNELS 65535
+#define PPTP_FIRMWARE_STRING "0.01"
+#define PPTP_FIRMWARE_VERSION 0x001
+#define PPTP_HOSTNAME {'l','o','c','a','l',0}
+#define PPTP_HOSTNAME_LEN 5
+#define PPTP_VENDOR   {'c','a','n','a','n','i','a','n',0}
+#define PPTP_FRAME_CAP  PPTP_FRAME_ANY
+#define PPTP_BEARER_CAP PPTP_BEARER_DIGITAL
 #endif
 
 #endif /* INC_PPTP_OPTIONS_H */

Reply via email to