Text   |  XML   |  ReML   |   Visible Warnings:

Ignored Return Value  at packet-ospf.c:2437

No properties have been set. | edit properties
Jump to warning location ↓ warning details...
Show Events | Options

dissect_ospf_lsa_mpls

(/home/sate/Testcases/c/cve/wireshark-1.2.0/epan/dissectors/packet-ospf.c)expand/collapse
Show more  
 2023  dissect_ospf_lsa_mpls(tvbuff_t *tvb, int offset, proto_tree *tree,
 2024                        guint32 length)
 2025  {
 2026      proto_item *ti, *hidden_item;
 2027      proto_tree *mpls_tree;
 2028      proto_tree *tlv_tree;
 2029      proto_tree *stlv_tree;
 2030      proto_tree *stlv_admingrp_tree = NULL;
 2031   
 2032      int tlv_type;
 2033      int tlv_length;
 2034      int tlv_end_offset;
 2035   
 2036      int stlv_type, stlv_len, stlv_offset;
 2037      const char *stlv_name;
 2038      guint32 stlv_admingrp, mask;
 2039      int i;
 2040      guint8 switch_cap;
 2041   
 2042      const guint8 allzero[] = { 0x00, 0x00, 0x00 };
 2043      guint num_bcs = 0;
 2044       
 2045      ti = proto_tree_add_text(tree, tvb, offset, length,
 2046                               "MPLS Traffic Engineering LSA");
 2047      hidden_item = proto_tree_add_item(tree, ospf_filter[OSPFF_LS_MPLS],
 2048                                 tvb, offset, 2, FALSE);
 2049      PROTO_ITEM_SET_HIDDEN(hidden_item);
 2050      mpls_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls);
 2051   
 2052      while (length != 0) {
 2053          tlv_type = tvb_get_ntohs(tvb, offset);
 2054          tlv_length = tvb_get_ntohs(tvb, offset + 2);
 2055          tlv_end_offset = offset + tlv_length + 4;
 2056   
 2057          switch (tlv_type) {
 2058   
 2059          case MPLS_TLV_ROUTER:
 2060              ti = proto_tree_add_text(mpls_tree, tvb, offset, tlv_length+4,
 2061                                       "Router Address: %s",
 2062                                       ip_to_str(tvb_get_ptr(tvb, offset+4, 4)));
 2063              tlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_router);
 2064              proto_tree_add_text(tlv_tree, tvb, offset, 2, "TLV Type: 1 - Router Address");
 2065              proto_tree_add_text(tlv_tree, tvb, offset+2, 2, "TLV Length: %u",
 2066                                  tlv_length);
 2067              proto_tree_add_item(tlv_tree, ospf_filter[OSPFF_LS_MPLS_ROUTERID],
 2068                                  tvb, offset+4, 4, FALSE);
 2069              break;
 2070   
 2071          case MPLS_TLV_LINK:
 2072              ti = proto_tree_add_text(mpls_tree, tvb, offset, tlv_length+4,
 2073                                       "Link Information");
 2074              tlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link);
 2075              proto_tree_add_text(tlv_tree, tvb, offset, 2, "TLV Type: 2 - Link Information");
 2076              proto_tree_add_text(tlv_tree, tvb, offset+2, 2, "TLV Length: %u",
 2077                                  tlv_length);
 2078              stlv_offset = offset + 4;
 2079   
 2080              /* Walk down the sub-TLVs for link information */
 2081              while (stlv_offset < tlv_end_offset) {
 2082                  stlv_type = tvb_get_ntohs(tvb, stlv_offset);
 2083                  stlv_len = tvb_get_ntohs(tvb, stlv_offset + 2);
 2084                  stlv_name = val_to_str(stlv_type, mpls_link_stlv_str, "Unknown sub-TLV");
 2085                  switch (stlv_type) {
 2086   
 2087                  case MPLS_LINK_TYPE:
 2088                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2089                                       "%s: %u - %s", stlv_name,
 2090                                       tvb_get_guint8(tvb, stlv_offset + 4),
 2091                                       val_to_str(tvb_get_guint8(tvb, stlv_offset + 4),
 2092                                          mpls_link_stlv_ltype_str, "Unknown Link Type"));
 2093                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 2094                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2095                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2096                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2097                                          stlv_len);
 2098                      proto_tree_add_item(stlv_tree, ospf_filter[OSPFF_LS_MPLS_LINKTYPE],
 2099                                          tvb, stlv_offset+4, 1,FALSE);
 2100                      break;
 2101   
 2102                  case MPLS_LINK_ID:
 2103                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2104                                               "%s: %s", stlv_name,
 2105                                               ip_to_str(tvb_get_ptr(tvb, stlv_offset + 4, 4)));
 2106                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 2107                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2108                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2109                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2110                                          stlv_len);
 2111                      proto_tree_add_item(stlv_tree, ospf_filter[OSPFF_LS_MPLS_LINKID],
 2112                                          tvb, stlv_offset+4, 4, FALSE);
 2113                      break;
 2114   
 2115                  case MPLS_LINK_LOCAL_IF:
 2116                  case MPLS_LINK_REMOTE_IF:
 2117                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2118                                               "%s", stlv_name);
 2119                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 2120                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2121                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2122                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2123                                          stlv_len);
 2124                      /*   The Local/Remote Interface IP Address sub-TLV is TLV type 3/4, and is 4N 
 2125                         octets in length, where N is the number of neighbor addresses. */
 2126                      for (i=0; i < stlv_len; i+=4)
 2127                        proto_tree_add_item(stlv_tree,
 2128                                            stlv_type==MPLS_LINK_LOCAL_IF ?
 2129                                            ospf_filter[OSPFF_LS_MPLS_LOCAL_ADDR] :
 2130                                            ospf_filter[OSPFF_LS_MPLS_REMOTE_ADDR],
 2131                                            tvb, stlv_offset+4+i, 4, FALSE);
 2132                      break;
 2133   
 2134                  case MPLS_LINK_TE_METRIC:
 2135                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2136                                               "%s: %u", stlv_name,
 2137                                               tvb_get_ntohl(tvb, stlv_offset + 4));
 2138                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 2139                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2140                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2141                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2142                                          stlv_len);
 2143                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, 4, "%s: %u", stlv_name,
 2144                                          tvb_get_ntohl(tvb, stlv_offset + 4));
 2145                      break;
 2146   
 2147                  case MPLS_LINK_COLOR:
 2148                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2149                                               "%s: 0x%08x", stlv_name,
 2150                                               tvb_get_ntohl(tvb, stlv_offset + 4));
 2151                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 2152                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2153                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2154                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2155                                          stlv_len);
 2156                      stlv_admingrp = tvb_get_ntohl(tvb, stlv_offset + 4);
 2157                      mask = 1;
 2158                      ti = proto_tree_add_item(stlv_tree, ospf_filter[OSPFF_LS_MPLS_LINKCOLOR],
 2159                                          tvb, stlv_offset+4, 4, FALSE);
 2160                      stlv_admingrp_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv_admingrp);
 2161                      if (stlv_admingrp_tree == NULL)
 2162                          return;
 2163                      for (i = 0 ; i < 32 ; i++) {
 2164                          if ((stlv_admingrp & mask) != 0) {
 2165                              proto_tree_add_text(stlv_admingrp_tree, tvb, stlv_offset+4,
 2166                                  4, "Group %d", i);
 2167                          }
 2168                          mask <<= 1;
 2169                      }
 2170                      break;
 2171   
 2172                  case MPLS_LINK_MAX_BW:
 2173                  case MPLS_LINK_MAX_RES_BW:
 2174                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2175                                               "%s: %.10g bytes/s (%.0f bits/s)", stlv_name,
 2176                                               tvb_get_ntohieee_float(tvb, stlv_offset + 4),
 2177                                               tvb_get_ntohieee_float(tvb, stlv_offset + 4) * 8.0);
 2178                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 2179                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2180                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2181                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2182                                          stlv_len);
 2183                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, 4, "%s: %.10g bytes/s (%.0f bits/s)", stlv_name,
 2184                                          tvb_get_ntohieee_float(tvb, stlv_offset + 4),
 2185                                          tvb_get_ntohieee_float(tvb, stlv_offset + 4) * 8.0);
 2186                      break;
 2187   
 2188                  case MPLS_LINK_UNRES_BW:
 2189                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2190                                               "%s", stlv_name);
 2191                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 2192                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2193                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2194                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2195                                          stlv_len);
 2196                      for (i = 0; i < 8; i++) {
 2197                          proto_tree_add_text(stlv_tree, tvb, stlv_offset+4+(i*4), 4,
 2198                                              "Pri (or TE-Class) %d: %.10g bytes/s (%.0f bits/s)", i,
 2199                                              tvb_get_ntohieee_float(tvb, stlv_offset + 4 + i*4),
 2200                                              tvb_get_ntohieee_float(tvb, stlv_offset + 4 + i*4) * 8.0);
 2201                      }
 2202                      break;
 2203   
 2204                  case MPLS_LINK_BANDWIDTH_CONSTRAINT:
 2205                      /*
 2206                        The "Bandwidth Constraints" sub-TLV format is illustrated below:
 2207                         
 2208                        0                   1                   2                   3
 2209                        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 2210                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 2211                        | BC Model Id   |           Reserved                            |
 2212                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 2213                        |                       BC0 value                               |
 2214                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 2215                        //                       . . .                                 //
 2216                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 2217                        |                       BCh value                               |
 2218                        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 2219                      */
 2220                       
 2221                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2222                                               "%s", stlv_name);
 2223                       
 2224                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 2225                       
 2226                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2227                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2228                       
 2229                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2230                                          stlv_len);
 2231                       
 2232                      proto_tree_add_item(stlv_tree, ospf_filter[OSPFF_LS_MPLS_BC_MODEL_ID],
 2233                          tvb, stlv_offset+4, 1, FALSE);
 2234   
 2235                      /* 3 octets reserved +5, +6 and +7 (all 0x00) */
 2236                      if(tvb_memeql(tvb, stlv_offset+5, allzero, 3) == -1) {
 2237                          proto_tree_add_text(stlv_tree, tvb, stlv_offset+5, 3,  
 2238                                              "Warning: these bytes are reserved and must be 0x00");
 2239                      }
 2240                       
 2241                      if(((stlv_len % 4)!=0)) {
 2242                          proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, stlv_len,  
 2243                                              "Malformed Packet: Length must be N x 4 octets");
 2244                          break;
 2245                      }
 2246                       
 2247                      /* stlv_len shound range from 4 to 36 bytes */
 2248                      num_bcs = (stlv_len - 4)/4;
 2249                       
 2250                      if(num_bcs>8) {
 2251                          proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, stlv_len,  
 2252                                              "Malformed Packet: too many BC (%u)", num_bcs);
 2253                          break;
 2254                      }
 2255                       
 2256                      if(num_bcs==0) {
 2257                          proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, stlv_len,
 2258                                              "Malformed Packet: Bandwidth Constraints sub-TLV with no BC?");
 2259                          break;
 2260                      }
 2261                       
 2262                      for(i = 0; i < (int) num_bcs; i++) {
 2263                          proto_tree_add_text(stlv_tree, tvb, stlv_offset+8+(i*4), 4,
 2264                                              "BC %d: %.10g bytes/s (%.0f bits/s)", i,
 2265                                              tvb_get_ntohieee_float(tvb, stlv_offset + 8 + i*4),
 2266                                              tvb_get_ntohieee_float(tvb, stlv_offset + 8 + i*4) * 8.0);
 2267                      }
 2268                      break;
 2269                       
 2270                  case MPLS_LINK_LOCAL_REMOTE_ID:
 2271                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2272                                               "%s: %d (0x%x) - %d (0x%x)", stlv_name,
 2273                                               tvb_get_ntohl(tvb, stlv_offset + 4),
 2274                                               tvb_get_ntohl(tvb, stlv_offset + 4),
 2275                                               tvb_get_ntohl(tvb, stlv_offset + 8),
 2276                                               tvb_get_ntohl(tvb, stlv_offset + 8));
 2277                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 2278   
 2279                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2280                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2281                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2282                                          stlv_len);
 2283                      proto_tree_add_item(stlv_tree,
 2284                                          ospf_filter[OSPFF_LS_MPLS_LOCAL_IFID],
 2285                                          tvb, stlv_offset+4, 4, FALSE);
 2286                      proto_tree_add_item(stlv_tree,
 2287                                          ospf_filter[OSPFF_LS_MPLS_REMOTE_IFID],
 2288                                          tvb, stlv_offset+8, 4, FALSE);
 2289                      break;
 2290   
 2291                  case MPLS_LINK_IF_SWITCHING_DESC:
 2292                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2293                                               "%s", stlv_name);
 2294                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 2295                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2296                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2297                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2298                                          stlv_len);
 2299                      switch_cap = tvb_get_guint8 (tvb, stlv_offset+4);
 2300                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, 1, "Switching Type: %s",
 2301                                          val_to_str(tvb_get_guint8(tvb,stlv_offset+4),
 2302                                                     gmpls_switching_type_str, "Unknown (%d)"));
 2303                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+5, 1, "Encoding: %s",
 2304                                          val_to_str(tvb_get_guint8(tvb,stlv_offset+5),
 2305                                                     gmpls_lsp_enc_str, "Unknown (%d)"));
 2306                      for (i = 0; i < 8; i++) {
 2307                          proto_tree_add_text(stlv_tree, tvb, stlv_offset+8+(i*4), 4,
 2308                                              "Pri %d: %.10g bytes/s (%.0f bits/s)", i,
 2309                                              tvb_get_ntohieee_float(tvb, stlv_offset + 8 + i*4),
 2310                                              tvb_get_ntohieee_float(tvb, stlv_offset + 8 + i*4) * 8.0);
 2311                      }
 2312                      if (switch_cap >=1 && switch_cap <=4) {           /* PSC-1 .. PSC-4 */
 2313                          proto_tree_add_text(stlv_tree, tvb, stlv_offset+40, 4,
 2314                                              "Minimum LSP bandwidth: %.10g bytes/s (%.0f bits/s)",
 2315                                              tvb_get_ntohieee_float(tvb, stlv_offset + 40),
 2316                                              tvb_get_ntohieee_float(tvb, stlv_offset + 40) * 8.0);
 2317                          proto_tree_add_text(stlv_tree, tvb, stlv_offset+44, 2,
 2318                                              "Interface MTU: %d", tvb_get_ntohs(tvb, stlv_offset+44));
 2319                      }
 2320   
 2321                      if (switch_cap == 100) {                         /* TDM */
 2322                          proto_tree_add_text(stlv_tree, tvb, stlv_offset+40, 4,
 2323                                              "Minimum LSP bandwidth: %.10g bytes/s (%.0f bits/s)",
 2324                                              tvb_get_ntohieee_float(tvb, stlv_offset + 40),
 2325                                              tvb_get_ntohieee_float(tvb, stlv_offset + 40) * 8.0);
 2326                          proto_tree_add_text(stlv_tree, tvb, stlv_offset+44, 2,
 2327                                              "SONET/SDH: %s",
 2328                                              tvb_get_guint8(tvb, stlv_offset+44) ?
 2329                                              "Arbitrary" : "Standard");
 2330                      }
 2331                      break;
 2332                  case MPLS_LINK_PROTECTION:
 2333                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2334                                               "%s", stlv_name);
 2335                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 2336                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2337                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2338                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2339                                          stlv_len);
 2340                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, 1, "Protection Capability: %s (0x%x)",
 2341                                          val_to_str(tvb_get_guint8(tvb,stlv_offset+4), gmpls_protection_cap_str, "Unknown (%d)"),tvb_get_guint8(tvb,stlv_offset+4));
 2342                      break;
 2343   
 2344                  case MPLS_LINK_SHARED_RISK_GROUP:
 2345                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2346                                               "%s", stlv_name);
 2347                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 2348                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2349                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2350                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2351                                          stlv_len);
 2352                      for (i=0; i < stlv_len; i+=4)
 2353                          proto_tree_add_text(stlv_tree, tvb, stlv_offset+4+i, 4, "Shared Risk Link Group: %u",
 2354                                          tvb_get_ntohl(tvb,stlv_offset+4+i));
 2355                      break;
 2356   
 2357                  case OIF_LOCAL_NODE_ID:
 2358                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2359                                               "%s: %s", stlv_name,
 2360                                               ip_to_str(tvb_get_ptr(tvb, stlv_offset + 4, 4)));
 2361                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 2362                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2363                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2364                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2365                                          stlv_len);
 2366                      proto_tree_add_item(stlv_tree,  
 2367                                          ospf_filter[OSPFF_LS_OIF_LOCAL_NODE_ID],
 2368                                          tvb, stlv_offset + 4, 4, FALSE);
 2369                      break;
 2370   
 2371                  case OIF_REMOTE_NODE_ID:
 2372                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2373                                               "%s: %s", stlv_name,
 2374                                               ip_to_str(tvb_get_ptr(tvb, stlv_offset + 4, 4)));
 2375                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 2376                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2377                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2378                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2379                                          stlv_len);
 2380                      proto_tree_add_item(stlv_tree,  
 2381                                          ospf_filter[OSPFF_LS_OIF_REMOTE_NODE_ID],
 2382                                          tvb, stlv_offset + 4, 4, FALSE);
 2383                      break;
 2384   
 2385                  case OIF_SONET_SDH_SWITCHING_CAPABILITY:
 2386                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4, "%s", stlv_name);
 2387                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 2388                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2389                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2390                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2391                                          stlv_len);
 2392                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, 1, "Switching Cap: %s",
 2393                                          val_to_str(tvb_get_guint8 (tvb, stlv_offset+4),
 2394                                                     gmpls_switching_type_str, "Unknown (%d)"));
 2395                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+5, 1, "Encoding: %s",
 2396                                          val_to_str(tvb_get_guint8(tvb,stlv_offset+5),
 2397                                                     gmpls_lsp_enc_str, "Unknown (%d)"));
 2398                      for (i = 0; i < (stlv_len - 4) / 4; i++) {
 2399                          proto_tree_add_text(stlv_tree, tvb, stlv_offset+8+(i*4), 4,
 2400                                              "%s: %d free timeslots",
 2401                                              val_to_str(tvb_get_guint8(tvb, stlv_offset+8+(i*4)),
 2402                                                         gmpls_sonet_signal_type_str,
 2403                                                         "Unknown Signal Type (%d)"),
 2404                                              tvb_get_ntoh24(tvb, stlv_offset + 9 + i*4));
 2405                      }
 2406   
 2407                      break;
 2408                  default:
 2409                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2410                                          "Unknown Link sub-TLV: %u", stlv_type);
 2411                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link_stlv);
 2412                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2413                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2414                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2415                                          stlv_len);
 2416                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, stlv_len,
 2417                                          "TLV Value");
 2418                      break;
 2419                  }
 2420                  stlv_offset += ((stlv_len+4+3)/4)*4;
 2421              }
 2422              break;
 2423   
 2424          case OIF_TLV_TNA:
 2425              ti = proto_tree_add_text(mpls_tree, tvb, offset, tlv_length+4,
 2426                                       "TNA Information");
 2427              tlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_oif_tna);
 2428              proto_tree_add_text(tlv_tree, tvb, offset, 2, "TLV Type: 32768 - TNA Information");
 2429              proto_tree_add_text(tlv_tree, tvb, offset+2, 2, "TLV Length: %u",
 2430                                  tlv_length);
 2431              stlv_offset = offset + 4;
 2432   
 2433              /* Walk down the sub-TLVs for TNA information */
 2434              while (stlv_offset < tlv_end_offset) {
 2435                  stlv_type = tvb_get_ntohs(tvb, stlv_offset);
 2436                  stlv_len = tvb_get_ntohs(tvb, stlv_offset + 2);
 2437                  stlv_name = val_to_str(stlv_type, oif_stlv_str, "Unknown sub-TLV");
 2438                  switch (stlv_type) {
 2439   
 2440                  case OIF_NODE_ID:
 2441                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2442                                               "%s: %s", stlv_name,
 2443                                               ip_to_str(tvb_get_ptr(tvb, stlv_offset + 4, 4)));
 2444                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_oif_tna_stlv);
 2445                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2446                                          "TLV Type: %u: %s", stlv_type, stlv_name);
 2447                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u",
 2448                                          stlv_len);
 2449                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, 4, "%s: %s", stlv_name,
 2450                                          ip_to_str(tvb_get_ptr(tvb, stlv_offset + 4, 4)));
 2451                      break;
 2452   
 2453                  case OIF_TNA_IPv4_ADDRESS:
 2454                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2455                                               "%s (IPv4): %s", stlv_name,
 2456                                               ip_to_str(tvb_get_ptr(tvb, stlv_offset + 8, 4)));
 2457                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_oif_tna_stlv);
 2458                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2459                                          "TLV Type: %u: %s (IPv4)", stlv_type, stlv_name);
 2460                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u", stlv_len);
 2461                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, 1, "Addr Length: %u",
 2462                                          tvb_get_guint8 (tvb, stlv_offset+4));
 2463                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+8, stlv_len - 4, "TNA Addr: %s",
 2464                                          ip_to_str(tvb_get_ptr(tvb, stlv_offset + 8, 4)));
 2465                      break;
 2466   
 2467                  case OIF_TNA_IPv6_ADDRESS:
 2468                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2469                                               "%s (IPv6): %s", stlv_name,
 2470                                               ip6_to_str((const struct e_in6_addr *)
 2471                                                           tvb_get_ptr(tvb, stlv_offset + 8, 16)));
 2472                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_oif_tna_stlv);
 2473                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2474                                          "TLV Type: %u: %s (IPv6)", stlv_type, stlv_name);
 2475                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u", stlv_len);
 2476                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, 1, "Addr Length: %u",
 2477                                          tvb_get_guint8 (tvb, stlv_offset+4));
 2478                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+8, stlv_len - 4, "TNA Addr: %s",
 2479                                          ip6_to_str((const struct e_in6_addr *)
 2480                                                      tvb_get_ptr(tvb, stlv_offset + 8, 16)));
 2481                      break;
 2482   
 2483                  case OIF_TNA_NSAP_ADDRESS:
 2484                      ti = proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2485                                               "%s (NSAP): %s", stlv_name,
 2486                                               tvb_bytes_to_str (tvb, stlv_offset + 8, stlv_len - 4));
 2487                      stlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_oif_tna_stlv);
 2488                      proto_tree_add_text(stlv_tree, tvb, stlv_offset, 2,
 2489                                          "TLV Type: %u: %s (NSAP)", stlv_type, stlv_name);
 2490                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+2, 2, "TLV Length: %u", stlv_len);
 2491                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+4, 1, "Addr Length: %u",
 2492                                              tvb_get_guint8 (tvb, stlv_offset+4));
 2493                      proto_tree_add_text(stlv_tree, tvb, stlv_offset+8, stlv_len - 4, "TNA Addr: %s",
 2494                                          tvb_bytes_to_str(tvb, stlv_offset+8, stlv_len - 4));
 2495                      break;
 2496   
 2497                  default:
 2498                      proto_tree_add_text(tlv_tree, tvb, stlv_offset, stlv_len+4,
 2499                                          "Unknown Link sub-TLV: %u", stlv_type);
 2500                      break;
 2501                  }
 2502                  stlv_offset += ((stlv_len+4+3)/4)*4;
 2503              }
 2504              break;
 2505          default:
 2506              ti = proto_tree_add_text(mpls_tree, tvb, offset, tlv_length+4,
 2507                                       "Unknown LSA: %u", tlv_type);
 2508              tlv_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls_link);
 2509              proto_tree_add_text(tlv_tree, tvb, offset, 2, "TLV Type: %u - Unknown",
 2510                                  tlv_type);
 2511              proto_tree_add_text(tlv_tree, tvb, offset+2, 2, "TLV Length: %u",
 2512                                  tlv_length);
 2513              proto_tree_add_text(tlv_tree, tvb, offset+4, tlv_length, "TLV Data");
 2514              break;
 2515          }
 2516   
 2517          offset += tlv_length + 4;
 2518          length -= tlv_length + 4;
 2519      }
 2520  }
Show more  




Change Warning 12115.35757 : Ignored Return Value

Priority:
State:
Finding:
Owner:
Note: