]> git.proxmox.com Git - mirror_frr.git/blobdiff - isisd/iso_checksum.c
Merge pull request #5280 from qlyoung/doc-clean-topotest-json
[mirror_frr.git] / isisd / iso_checksum.c
index 43124fb2f41600bc1151a56f5942b02d2225eda5..0da6d5fc8c67755c11cef20256a724d4cd7cc0e4 100644 (file)
  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  * more details.
-
+ *
  * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ * with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
 #include <zebra.h>
  * Based on Annex C.4 of ISO/IEC 8473
  */
 
-int iso_csum_verify(u_char *buffer, int len, uint16_t *csum)
+int iso_csum_verify(uint8_t *buffer, int len, uint16_t csum, int offset)
 {
-       u_int16_t checksum;
-       u_int32_t c0;
-       u_int32_t c1;
+       uint16_t checksum;
+       uint32_t c0;
+       uint32_t c1;
 
-       c0 = *csum & 0xff00;
-       c1 = *csum & 0x00ff;
+       c0 = csum & 0xff00;
+       c1 = csum & 0x00ff;
 
        /*
         * If both are zero return correct
@@ -66,11 +66,8 @@ int iso_csum_verify(u_char *buffer, int len, uint16_t *csum)
        if (c0 == 0 || c1 == 0)
                return 1;
 
-       /* Offset of checksum from the start of the buffer */
-       int offset = (u_char *)csum - buffer;
-
        checksum = fletcher_checksum(buffer, len, offset);
-       if (checksum == *csum)
+       if (checksum == htons(csum))
                return 0;
        return 1;
 }