summaryrefslogtreecommitdiffstats
path: root/isisd
diff options
context:
space:
mode:
Diffstat (limited to 'isisd')
-rw-r--r--isisd/dict.c5
-rw-r--r--isisd/isis_dlpi.c21
-rw-r--r--isisd/iso_checksum.c97
3 files changed, 123 insertions, 0 deletions
diff --git a/isisd/dict.c b/isisd/dict.c
index 6c3e1e7f..b2bb5940 100644
--- a/isisd/dict.c
+++ b/isisd/dict.c
@@ -14,8 +14,13 @@
* into proprietary software; there is no requirement for such software to
* contain a copyright notice related to this source.
*
+<<<<<<< HEAD:isisd/dict.c
+ * $Id: dict.c,v 1.5 2007/08/07 18:49:18 paul Exp $
+ * $Name: $
+=======
* $Id$
* $Name$
+>>>>>>> 41dc3488cf127a1e23333459a0c316ded67f7ff3:isisd/dict.c
*/
#include <stdlib.h>
diff --git a/isisd/isis_dlpi.c b/isisd/isis_dlpi.c
index 3cbe0b4f..21512e19 100644
--- a/isisd/isis_dlpi.c
+++ b/isisd/isis_dlpi.c
@@ -42,6 +42,11 @@
#include "isisd/isis_circuit.h"
#include "isisd/isis_flags.h"
#include "isisd/isisd.h"
+<<<<<<< HEAD:isisd/isis_dlpi.c
+#include "isisd/isis_constants.h"
+#include "isisd/isis_circuit.h"
+=======
+>>>>>>> 41dc3488cf127a1e23333459a0c316ded67f7ff3:isisd/isis_dlpi.c
#include "isisd/isis_network.h"
#include "privs.h"
@@ -313,6 +318,14 @@ open_dlpi_dev (struct isis_circuit *circuit)
circuit->interface->name);
return ISIS_WARNING;
}
+<<<<<<< HEAD:isisd/isis_dlpi.c
+
+ /* Try first as Style 1 */
+ (void) snprintf(devpath, sizeof (devpath), "/dev/%s",
+ circuit->interface->name);
+ unit = -1;
+ fd = dlpiopen (devpath, &acklen);
+=======
/* Try the vanity node first, if permitted */
if (getenv("DLPI_DEVONLY") == NULL)
@@ -330,6 +343,7 @@ open_dlpi_dev (struct isis_circuit *circuit)
unit = -1;
fd = dlpiopen (devpath, &acklen);
}
+>>>>>>> 41dc3488cf127a1e23333459a0c316ded67f7ff3:isisd/isis_dlpi.c
/* If that fails, try again as Style 2 */
if (fd == -1)
@@ -461,11 +475,17 @@ open_dlpi_dev (struct isis_circuit *circuit)
if (ioctl (fd, I_PUSH, "pfmod") == 0)
{
struct packetfilt pfil;
+<<<<<<< HEAD:isisd/isis_dlpi.c
+=======
struct strioctl sioc;
+>>>>>>> 41dc3488cf127a1e23333459a0c316ded67f7ff3:isisd/isis_dlpi.c
pfil.Pf_Priority = 0;
pfil.Pf_FilterLen = sizeof (pf_filter) / sizeof (u_short);
memcpy (pfil.Pf_Filter, pf_filter, sizeof (pf_filter));
+<<<<<<< HEAD:isisd/isis_dlpi.c
+ ioctl (fd, PFIOCSETF, &pfil);
+=======
/* pfmod does not support transparent ioctls */
sioc.ic_cmd = PFIOCSETF;
sioc.ic_timout = 5;
@@ -474,6 +494,7 @@ open_dlpi_dev (struct isis_circuit *circuit)
if (ioctl (fd, I_STR, &sioc) == -1)
zlog_warn("%s: could not perform PF_IOCSETF on %s",
__func__, circuit->interface->name);
+>>>>>>> 41dc3488cf127a1e23333459a0c316ded67f7ff3:isisd/isis_dlpi.c
}
circuit->fd = fd;
diff --git a/isisd/iso_checksum.c b/isisd/iso_checksum.c
index 294fe994..abd101b9 100644
--- a/isisd/iso_checksum.c
+++ b/isisd/iso_checksum.c
@@ -75,3 +75,100 @@ iso_csum_verify (u_char * buffer, int len, uint16_t * csum)
return 0;
return 1;
}
+<<<<<<< HEAD:isisd/iso_checksum.c
+
+/*
+ * Creates the checksum. *csum points to the position of the checksum in the
+ * PDU.
+ * Based on Annex C.4 of ISO/IEC 8473
+ */
+#define FIXED_CODE
+u_int16_t
+iso_csum_create (u_char * buffer, int len, u_int16_t n)
+{
+
+ u_int8_t *p;
+ int x;
+ int y;
+ u_int32_t mul;
+ u_int32_t c0;
+ u_int32_t c1;
+ u_int16_t checksum;
+ u_int16_t *csum;
+ int i, init_len, partial_len;
+
+ checksum = 0;
+
+ /*
+ * Zero the csum in the packet.
+ */
+ csum = (u_int16_t *) (buffer + n);
+ *(csum) = checksum;
+
+ p = buffer;
+ c0 = 0;
+ c1 = 0;
+ init_len = len;
+
+ while (len != 0)
+ {
+ partial_len = MIN(len, 5803);
+
+ for (i = 0; i < partial_len; i++)
+ {
+ c0 = c0 + *(p++);
+ c1 += c0;
+ }
+
+ c0 = c0 % 255;
+ c1 = c1 % 255;
+
+ len -= partial_len;
+ }
+
+ mul = (init_len - n)*(c0);
+
+#ifdef FIXED_CODE
+ x = mul - c0 - c1;
+ y = c1 - mul - 1;
+
+ if (y > 0)
+ y++;
+ if (x < 0)
+ x--;
+
+ x %= 255;
+ y %= 255;
+
+ if (x == 0)
+ x = 255;
+ if (y == 0)
+ y = 1;
+
+ checksum = (y << 8) | (x & 0xFF);
+
+#else
+ x = mul - c0 - c1;
+ x %= 255;
+
+ y = c1 - mul - 1;
+ y %= 255;
+
+ if (x == 0)
+ x = 255;
+ if (y == 0)
+ y = 255;
+
+ checksum = ((y << 8) | x);
+#endif
+
+ /*
+ * Now we write this to the packet
+ */
+ *(csum) = checksum;
+
+ /* return the checksum for user usage */
+ return checksum;
+}
+=======
+>>>>>>> 41dc3488cf127a1e23333459a0c316ded67f7ff3:isisd/iso_checksum.c