#include "app-layer-dnp3.h"
+static int g_dnp3_match_buffer_id = 0;
+static int g_dnp3_data_buffer_id = 0;
+
/**
* The detection struct.
*/
s->alproto = ALPROTO_DNP3;
s->flags |= SIG_FLAG_STATE_MATCH;
- SigMatchAppendSMToList(s, sm, DETECT_SM_LIST_DNP3_MATCH);
+ SigMatchAppendSMToList(s, sm, g_dnp3_match_buffer_id);
SCReturnInt(0);
error:
s->alproto = ALPROTO_DNP3;
s->flags |= SIG_FLAG_STATE_MATCH;
- SigMatchAppendSMToList(s, sm, DETECT_SM_LIST_DNP3_MATCH);
+ SigMatchAppendSMToList(s, sm, g_dnp3_match_buffer_id);
SCReturnInt(0);
error:
sm->ctx = (void *)detect;
s->alproto = ALPROTO_DNP3;
s->flags |= SIG_FLAG_STATE_MATCH;
- SigMatchAppendSMToList(s, sm, DETECT_SM_LIST_DNP3_MATCH);
+ SigMatchAppendSMToList(s, sm, g_dnp3_match_buffer_id);
SCReturnInt(1);
fail:
static int DetectDNP3DataSetup(DetectEngineCtx *de_ctx, Signature *s, char *str)
{
SCEnter();
- s->init_data->list = DETECT_SM_LIST_DNP3_DATA_MATCH;
+ s->init_data->list = g_dnp3_data_buffer_id;
s->alproto = ALPROTO_DNP3;
SCReturnInt(0);
}
sigmatch_table[DETECT_AL_DNP3DATA].flags |= SIGMATCH_NOOPT;
sigmatch_table[DETECT_AL_DNP3DATA].flags |= SIGMATCH_PAYLOAD;
- DetectAppLayerInspectEngineRegister(ALPROTO_DNP3, SIG_FLAG_TOSERVER,
- DETECT_SM_LIST_DNP3_DATA_MATCH, DetectEngineInspectDNP3Data);
- DetectAppLayerInspectEngineRegister(ALPROTO_DNP3, SIG_FLAG_TOCLIENT,
- DETECT_SM_LIST_DNP3_DATA_MATCH, DetectEngineInspectDNP3Data);
+ DetectAppLayerInspectEngineRegister2("dnp3_data",
+ ALPROTO_DNP3, SIG_FLAG_TOSERVER,
+ DetectEngineInspectDNP3Data);
+ DetectAppLayerInspectEngineRegister2("dnp3_data",
+ ALPROTO_DNP3, SIG_FLAG_TOCLIENT,
+ DetectEngineInspectDNP3Data);
+ g_dnp3_data_buffer_id = DetectBufferTypeGetByName("dnp3_data");
SCReturn;
}
DetectDNP3ObjRegister();
/* Register the list of func, ind and obj. */
- DetectAppLayerInspectEngineRegister(ALPROTO_DNP3, SIG_FLAG_TOSERVER,
- DETECT_SM_LIST_DNP3_MATCH, DetectEngineInspectDNP3);
- DetectAppLayerInspectEngineRegister(ALPROTO_DNP3, SIG_FLAG_TOCLIENT,
- DETECT_SM_LIST_DNP3_MATCH, DetectEngineInspectDNP3);
+ DetectAppLayerInspectEngineRegister2("dnp3",
+ ALPROTO_DNP3, SIG_FLAG_TOSERVER,
+ DetectEngineInspectDNP3);
+ DetectAppLayerInspectEngineRegister2("dnp3",
+ ALPROTO_DNP3, SIG_FLAG_TOCLIENT,
+ DetectEngineInspectDNP3);
+
+ g_dnp3_match_buffer_id = DetectBufferTypeRegister("dnp3");
+
}
#ifdef UNITTESTS
"dnp3_func:2; sid:5000009; rev:1;)");
FAIL_IF_NULL(de_ctx->sig_list);
- FAIL_IF_NULL(de_ctx->sig_list->sm_lists_tail[DETECT_SM_LIST_DNP3_MATCH]);
- FAIL_IF_NULL(de_ctx->sig_list->sm_lists_tail[DETECT_SM_LIST_DNP3_MATCH]->ctx);
+ FAIL_IF_NULL(de_ctx->sig_list->sm_lists_tail[g_dnp3_match_buffer_id]);
+ FAIL_IF_NULL(de_ctx->sig_list->sm_lists_tail[g_dnp3_match_buffer_id]->ctx);
- dnp3func = (DetectDNP3 *)de_ctx->sig_list->sm_lists_tail[DETECT_SM_LIST_DNP3_MATCH]->ctx;
+ dnp3func = (DetectDNP3 *)de_ctx->sig_list->sm_lists_tail[g_dnp3_match_buffer_id]->ctx;
FAIL_IF(dnp3func->function_code != 2);
if (de_ctx != NULL) {
"dnp3_obj:99,99; sid:1; rev:1;)");
FAIL_IF(de_ctx->sig_list == NULL);
- FAIL_IF(de_ctx->sig_list->sm_lists_tail[DETECT_SM_LIST_DNP3_MATCH] == NULL);
- FAIL_IF(de_ctx->sig_list->sm_lists_tail[DETECT_SM_LIST_DNP3_MATCH]->ctx == NULL);
+ FAIL_IF(de_ctx->sig_list->sm_lists_tail[g_dnp3_match_buffer_id] == NULL);
+ FAIL_IF(de_ctx->sig_list->sm_lists_tail[g_dnp3_match_buffer_id]->ctx == NULL);
- detect = (DetectDNP3 *)de_ctx->sig_list->sm_lists_tail[DETECT_SM_LIST_DNP3_MATCH]->ctx;
+ detect = (DetectDNP3 *)de_ctx->sig_list->sm_lists_tail[g_dnp3_match_buffer_id]->ctx;
FAIL_IF(detect->obj_group != 99);
FAIL_IF(detect->obj_variation != 99);