{ WS_IFF_DORMANT, "DORMANT" }, { WS_IFF_ECHO, "ECHO" }, { 0x00, NULL } }; char tmp[16]; _fill_label_value_string_bitmask(label, value, iff_vals); g_snprintf(tmp, sizeof(tmp), " (0x%.8x)", value); g_strlcat(label, tmp, ITEM_LABEL_LENGTH); } static header_field_info hfi_netlink_route_ifi_flags NETLINK_ROUTE_HFI_INIT = { "Device flags", "netlink-route.ifi_flags", FT_UINT32, BASE_CUSTOM, CF_FUNC(hfi_netlink_route_ifi_flags_label), 0x00, NULL, HFILL }; static const true_false_string hfi_netlink_route_ifi_flags_iff_up_tfs = { "Up", "Down" }; static header_field_info hfi_netlink_route_ifi_flags_iff_up NETLINK_ROUTE_HFI_INIT = { "Interface", "netlink-route.ifi_flags.iff_up", FT_BOOLEAN, 32, &hfi_netlink_route_ifi_flags_iff_up_tfs, WS_IFF_UP, NULL, HFILL }; static header_field_info hfi_netlink_route_ifi_flags_iff_broadcast NETLINK_ROUTE_HFI_INIT = { "Broadcast", "netlink-route.ifi_flags.iff_broadcast", FT_BOOLEAN, 32, &tfs_valid_invalid, WS_IFF_BROADCAST, NULL, HFILL }; static header_field_info hfi_netlink_route_ifi_change NETLINK_ROUTE_HFI_INIT = { "Device change flags", "netlink-route.ifi_change", FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL };
NULL, HFILL }}, { &hf_ieee80211_prism_did_sq, {"Signal Quality", "prism.did.sq", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }}, { &hf_ieee80211_prism_did_signal, {"Signal", "prism.did.signal", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL }}, { &hf_ieee80211_prism_did_noise, {"Noise", "prism.did.noise", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL }}, { &hf_ieee80211_prism_did_rate, {"Data rate (Mb/s)", "prism.did.rate", FT_UINT32, BASE_CUSTOM, CF_FUNC(prism_rate_base_custom), 0x0, "Speed this frame was sent/received at", HFILL }}, { &hf_ieee80211_prism_did_istx, {"IsTX", "prism.did.istx", FT_UINT32, BASE_HEX, VALS(prism_istx_vals), 0x0, "Type of packet (RX or TX?)", HFILL }}, { &hf_ieee80211_prism_did_frmlen, {"Frame Length", "prism.did.frmlen", FT_UINT32, BASE_DEC, NULL, 0x0, "Length of the following frame in bytes", HFILL }}, { &hf_ieee80211_prism_did_unknown, {"Unknown DID Field", "prism.did.unknown", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }} };
void proto_register_llc(void) { static struct true_false_string ig_bit = { "Group", "Individual" }; static struct true_false_string cr_bit = { "Response", "Command" }; static hf_register_info hf[] = { { &hf_llc_dsap, { "DSAP", "llc.dsap", FT_UINT8, BASE_HEX, VALS(sap_vals), 0x0, "Destination Service Access Point", HFILL }}, { &hf_llc_dsap_sap, { "SAP", "llc.dsap.sap", FT_UINT8, BASE_CUSTOM, CF_FUNC(llc_sap_value), 0xFE, "Service Access Point", HFILL }}, { &hf_llc_dsap_ig, { "IG Bit", "llc.dsap.ig", FT_BOOLEAN, 8, TFS(&ig_bit), DSAP_GI_BIT, "Individual/Group", HFILL }}, { &hf_llc_ssap, { "SSAP", "llc.ssap", FT_UINT8, BASE_HEX, VALS(sap_vals), 0x0, "Source Service Access Point", HFILL }}, { &hf_llc_ssap_sap, { "SAP", "llc.ssap.sap", FT_UINT8, BASE_CUSTOM, CF_FUNC(llc_sap_value), 0xFE, "Service Access Point", HFILL }}, { &hf_llc_ssap_cr, { "CR Bit", "llc.ssap.cr", FT_BOOLEAN, 8, TFS(&cr_bit), SSAP_CR_BIT, "Command/Response", HFILL }}, { &hf_llc_ctrl, { "Control", "llc.control", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }}, { &hf_llc_n_r, { "N(R)", "llc.control.n_r", FT_UINT16, BASE_DEC, NULL, XDLC_N_R_EXT_MASK, NULL, HFILL }}, { &hf_llc_n_s, { "N(S)", "llc.control.n_s", FT_UINT16, BASE_DEC, NULL, XDLC_N_S_EXT_MASK, NULL, HFILL }}, { &hf_llc_p, { "Poll", "llc.control.p", FT_BOOLEAN, 8, TFS(&tfs_set_notset), XDLC_P_F, NULL, HFILL }}, { &hf_llc_p_ext, { "Poll", "llc.control.p", FT_BOOLEAN, 16, TFS(&tfs_set_notset), XDLC_P_F_EXT, NULL, HFILL }}, { &hf_llc_f, { "Final", "llc.control.f", FT_BOOLEAN, 8, TFS(&tfs_set_notset), XDLC_P_F, NULL, HFILL }}, { &hf_llc_f_ext, { "Final", "llc.control.f", FT_BOOLEAN, 16, TFS(&tfs_set_notset), XDLC_P_F_EXT, NULL, HFILL }}, { &hf_llc_s_ftype, { "Supervisory frame type", "llc.control.s_ftype", FT_UINT16, BASE_HEX, VALS(stype_vals), XDLC_S_FTYPE_MASK, NULL, HFILL }}, { &hf_llc_u_modifier_cmd, { "Command", "llc.control.u_modifier_cmd", FT_UINT8, BASE_HEX, VALS(modifier_vals_cmd), XDLC_U_MODIFIER_MASK, NULL, HFILL }}, { &hf_llc_u_modifier_resp, { "Response", "llc.control.u_modifier_resp", FT_UINT8, BASE_HEX, VALS(modifier_vals_resp), XDLC_U_MODIFIER_MASK, NULL, HFILL }}, { &hf_llc_ftype_i, { "Frame type", "llc.control.ftype", FT_UINT16, BASE_HEX, VALS(ftype_vals), XDLC_I_MASK, NULL, HFILL }}, { &hf_llc_ftype_s_u, { "Frame type", "llc.control.ftype", FT_UINT8, BASE_HEX, VALS(ftype_vals), XDLC_S_U_MASK, NULL, HFILL }}, { &hf_llc_ftype_s_u_ext, { "Frame type", "llc.control.ftype", FT_UINT16, BASE_HEX, VALS(ftype_vals), XDLC_S_U_MASK, NULL, HFILL }}, /* registered here but handled in ethertype.c */ { &hf_llc_type, { "Type", "llc.type", FT_UINT16, BASE_HEX, VALS(etype_vals), 0x0, NULL, HFILL }}, { &hf_llc_oui, { "Organization Code", "llc.oui", FT_UINT24, BASE_HEX, VALS(oui_vals), 0x0, NULL, HFILL }}, { &hf_llc_pid, { "Protocol ID", "llc.pid", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }} }; static gint *ett[] = { &ett_llc, &ett_llc_dsap, &ett_llc_ssap, &ett_llc_ctrl, }; proto_llc = proto_register_protocol("Logical-Link Control", "LLC", "llc"); proto_register_field_array(proto_llc, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); /* subdissector code */ dsap_subdissector_table = register_dissector_table("llc.dsap", "LLC SAP", FT_UINT8, BASE_HEX, DISSECTOR_TABLE_NOT_ALLOW_DUPLICATE); xid_subdissector_table = register_dissector_table("llc.xid_dsap", "LLC XID SAP", FT_UINT8, BASE_HEX, DISSECTOR_TABLE_NOT_ALLOW_DUPLICATE); register_dissector("llc", dissect_llc, proto_llc); }