Wireshark mailing list archives

Re: Registering Dissector for Private SNAP PID


From: Jaap Keuter <jaap.keuter () xs4all nl>
Date: Wed, 03 Apr 2013 23:44:20 +0200

Hi,

Have a look at epan/dissectors/packet-hpteam.c for instance. It's just a
reference to the header field for the representation of your PIDs.

Thanks,
Jaap


On 04/03/2013 04:42 PM, Christopher Merck wrote:
On 2013-03-05, Guy Harris wrote:
On Mar 5, 2013, at 5:39 AM, Christopher Merck <cmerck () crestron com>
wrote:
 I believe the correct way to proceed is to register a new dissector
table along the lines of "llc.oui",

I believe the correct way to proceed would be to add llc_add_oui() to
the Lua API, so that Lua dissectors that need to handle a not-already-
registered OUI can register that OUI, including a new dissector table
for PIDs in that OUI, and then a dissector (no matter what language it's
in) could register in that table.

I almost have this working. But what I don't understand is the fourth argument to llc_add_oui. That structure 
contains a list of PIDs to register and the table name. However, when I am registering the OUI I don't want to 
register any PIDs yet, and I have already specified the table_name as the second argument to llc_add_oui.

So, I'm trying to stuff some dummy data into hf_pid, but I get segfaults or assertion errors at runtime.

Any idea what I'm missing?

Thanks,
 Chris

---

WSLUA_FUNCTION wslua_llc_add_oui(lua_State* LS) { /* registers a new OUI for LLC/SNAP purposes */
#define WSLUA_ARG_llc_add_oui_OUI 1             /* OUI to register */
#define WSLUA_ARG_llc_add_oui_TABLE_NAME 2      /* name of table to register, should be of the form: 
llc.<ouiname>_pid*/
#define WSLUA_ARG_llc_add_oui_TABLE_UI_NAME 3   /* name to display in GUI */
        lua_Number oui = luaL_checknumber(LS,WSLUA_ARG_llc_add_oui_OUI);
        const gchar* table_name = luaL_checkstring(LS,WSLUA_ARG_llc_add_oui_TABLE_NAME);
        const gchar* table_ui_name = luaL_checkstring(LS,WSLUA_ARG_llc_add_oui_TABLE_UI_NAME);

        const value_string oui_pid_vals[] = { { 0, NULL } };
        gint hf_llc_oui_pid = -1;
        hf_register_info hf_pid = {
                &hf_llc_oui_pid,
                { "PID", NULL /*table_name*/,
                  FT_UINT16, BASE_HEX, VALS(oui_pid_vals),
                  0x0, NULL, HFILL }
        };
        hf_pid.hfinfo.abbrev = table_name;

/*
void
llc_add_oui(guint32 oui, const char *table_name, const char *table_ui_name,
    hf_register_info *hf_item)
*/

      // TODO: What do to about the fourth argument?

        llc_add_oui(oui, table_name, table_ui_name, &hf_pid);

        return 0;
}




___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev () wireshark org>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-request () wireshark org?subject=unsubscribe


Current thread: