The LTE PDCP dissector is an example of how it can be called. See
http://anonsvn.wireshark.org/viewvc/trunk/epan/dissectors/packet-pdcp-lte.c?revision=31661&view=markup
The function pasted below works out hotwto get the appropriate dissector handle. Search the file to see how that dissector handle is then used to call the dissector on the appropriate range of bytes.
Note that the MAC and RLC dissectors also have support for calling the RRC dissector for transparent mode - by setting preferences appropriately you should be able to decode many RRC messages starting from captured MAC frames.
Hope this helps,
Martin
/* Look for an RRC dissector for signalling data (using channel type and direction) */
static dissector_handle_t lookup_rrc_dissector_handle(struct pdcp_lte_info *p_pdcp_info)
{
dissector_handle_t rrc_handle = 0;
switch (p_pdcp_info->channelType)
{
case Channel_CCCH:
if (p_pdcp_info->direction == DIRECTION_UPLINK) {
rrc_handle = find_dissector("lte-rrc.ul.ccch");
}
else {
rrc_handle = find_dissector("lte-rrc.dl.ccch");
}
break;
case Channel_PCCH:
rrc_handle = find_dissector("lte-rrc.pcch");
break;
case Channel_BCCH:
switch (p_pdcp_info->BCCHTransport) {
case BCH_TRANSPORT:
rrc_handle = find_dissector("lte-rrc.bcch.bch");
break;
case DLSCH_TRANSPORT:
rrc_handle = find_dissector("lte-rrc.bcch.dl.sch");
break;
}
break;
case Channel_DCCH:
if (p_pdcp_info->direction == DIRECTION_UPLINK) {
rrc_handle = find_dissector("lte-rrc.ul.dcch");
}
else {
rrc_handle = find_dissector("lte-rrc.dl.dcch");
}
break;
default:
break;
}
return rrc_handle;
}