
  PROCEDURE [INLINE] nap$compute_ethernet_checksum
    (    ethernet_address: nat$system_identifier;
     VAR checksum: nat$checksum_value);

?? PUSH (LISTEXT := ON) ??
*copy nah$compute_ethernet_checksum


    VAR
      i: integer,
      octets: ^array [0 .. 5] of 0 .. 0ff(16),
      running_checksum: integer;

    octets := #LOC (ethernet_address);

    running_checksum := 0;
    FOR i := 0 TO 2 DO
      running_checksum := running_checksum * 2;
      IF running_checksum >= 65536 THEN
        running_checksum := running_checksum - 65535;
      IFEND;
      running_checksum := running_checksum + 256 * octets^ [i * 2] + octets^ [(i * 2) + 1];
      IF running_checksum >= 65536 THEN
        running_checksum := running_checksum - 65535;
      IFEND;
    FOREND;
    IF running_checksum = 65535 THEN
      running_checksum := 0;
    IFEND;
    checksum := running_checksum;

  PROCEND nap$compute_ethernet_checksum;

*copyc nat$checksum
*copyc nat$system_identifier
?? POP ??

