- /* XXX -> we could validate the cksum here! */
- proto_tree_add_uint(lsp_tree, hf_isis_lsp_checksum, tvb,
- offset, 2, tvb_get_ntohs(tvb, offset));
+ checksum = tvb_get_ntohs(tvb, offset);
+ tc = proto_tree_add_uint(lsp_tree, hf_isis_lsp_checksum, tvb, offset, 2, tvb_get_ntohs(tvb, offset));
+ check_tree = proto_item_add_subtree(tc, ett_isis_lsp_checksum);
+
+ switch (check_and_get_checksum(tvb, offset_checksum, pdu_length-12, checksum, offset, &cacl_checksum)) {
+ case NO_CKSUM :
+ proto_tree_add_text(check_tree, tvb, offset, 2,
+ "Checksum control disabled");
+ break;
+ case DATA_MISSING :
+ isis_dissect_unknown(tvb, tree, offset,
+ "packet length %d went beyond packet",
+ tvb_length_remaining(tvb, offset_checksum));
+ break;
+ case CKSUM_NOT_OK :
+ proto_tree_add_text(check_tree, tvb, offset, 2,
+ "Checksum error: 0x%04x expected", cacl_checksum);
+ break;
+ case CKSUM_OK :
+ proto_tree_add_text(check_tree, tvb, offset, 2,
+ "Checksum OK");
+ break;
+ default :
+ g_message("'check_and_get_checksum' returned an invalid value");
+ }