(/home/sate/Testcases/c/cve/wireshark-1.2.0/epan/dissectors/packet-ospf.c) |
| |
| 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);
x /home/sate/Testcases/c/cve/wireshark-1.2.0/epan/proto.h |
| |
319 | #define PROTO_ITEM_SET_HIDDEN(proto_item) \ |
320 | ((proto_item) ? FI_SET_FLAG((proto_item)->finfo, FI_HIDDEN) : 0) |
| |
x /home/sate/Testcases/c/cve/wireshark-1.2.0/epan/proto.h |
| |
246 | #define FI_SET_FLAG(fi, flag) (fi->flags = fi->flags | flag) |
| |
|
| 2050 | | | mpls_tree = proto_item_add_subtree(ti, ett_ospf_lsa_mpls); |
| 2051 | | | |
| 2052 | | | while (length != 0) { |
Event 4:
Continuing from loop body. Leaving loop. length != 0 evaluates to false.
hide
|
|
| 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 | | | |
| 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 | | | |
| 2125 | | | |
| 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 | | | |
| 2207 | | | |
| 2208 | | | |
| 2209 | | | |
| 2210 | | | |
| 2211 | | | |
| 2212 | | | |
| 2213 | | | |
| 2214 | | | |
| 2215 | | | |
| 2216 | | | |
| 2217 | | | |
| 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 | | | |
| 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 | | | |
| 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) { |
| 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) { |
| 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 | | | |
| 2434 | | | while (stlv_offset < tlv_end_offset) { |
Event 3:
Continuing from loop body. Leaving loop. stlv_offset < tlv_end_offset evaluates to false.
hide
|
|
| 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"); |
Ignored Return Value
The return value of val_to_str() is never checked in the highlighted execution scenario. - If the return value can indicate an error, the error will be ignored if the highlighted code executes.
- The return value of val_to_str() is checked 98% of the time in this project. CodeSonar is configured to enforce Ignored Return Value checks for any function whose return value is checked at least 96% of the time, unless the function is used fewer than 20 times. (To modify these thresholds, use configuration file parameters RETURN_CHECKER_SAMPLE_SIZE and RETURN_CHECKER_RATIO. To exempt val_to_str() from the Ignored Return Value check, use configuration file parameter RETURN_CHECKER_IGNORED_FUNCS).
Show: All events | Only primary events |
|
| 2438 | | | switch (stlv_type) { |
Event 2:
Executing default case.
hide
|
|
| 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 | | | } |
| |