-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Applayer plugin 5053 v3.14 #12127
Applayer plugin 5053 v3.14 #12127
Conversation
instead of a global variable. For easier initialization with dynamic number of protocols
for expectation_proto Ticket: 5053
for alproto_names Ticket: 5053
Ticket: 5053
so that we can use safely EXCEPTION_POLICY_MAX*sizeof(x)
Ticket: 5053 delay after initialization so that StringToAppProto works
Ticket: 5053
As too many cases are found when splitting tcp payload
As it is also used for HTTP/1 Remove it only for TCP and keep it for UDP.
Because some alprotos will remain static and defined as a constant, such as ALPROTO_UNKNOWN=0, or ALPROTO_FAILED. The regular already used protocols keep for now their static identifier such as ALPROTO_SNMP, but this could be made more dynamic in a later commit. ALPROTO_FAILED was used in comparison and these needed to change to use either ALPROTO_MAX or use standard function AppProtoIsValid
Ticket: 5053 The names are now dynamically registered at runtime. The AppProto alproto enum identifiers are still static for now. This is the final step before app-layer plugins.
Ticket: 5053
There was an implicit limit of 32 app-layer protocols used by probing parsers through a mask, meaning that Suricata should not support more than 32 app-layer protocols in total. This limit is relaxed to each flow not being able to run more than 32 probing parsers, meaning that for each source and destination port combination, the sum of registered probing parsers should not exceed 32, even if there are more than 32 in total.
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #12127 +/- ##
===========================================
+ Coverage 62.68% 80.59% +17.91%
===========================================
Files 840 910 +70
Lines 153669 258303 +104634
===========================================
+ Hits 96323 208190 +111867
+ Misses 57346 50113 -7233
Flags with carried forward coverage won't be shown. Click here to find out more. |
int SCPluginRegisterAppLayer(SCAppLayerPlugin *plugin) | ||
{ | ||
AppProto alproto = AlprotoMax; | ||
AppProtoRegisterProtoString(alproto, plugin->name); | ||
if (plugin->Register) { | ||
if (AppLayerParserPreRegister(plugin->Register) != 0) { | ||
return 1; | ||
} | ||
} | ||
if (plugin->KeywordsRegister) { | ||
if (SigTablePreRegister(plugin->KeywordsRegister) != 0) { | ||
return 1; | ||
} | ||
} | ||
if (plugin->Logger) { | ||
EveJsonLoggerRegistrationData reg_data = { | ||
.confname = plugin->confname, | ||
.logname = plugin->logname, | ||
.alproto = alproto, | ||
.LogTx = (EveJsonSimpleTxLogFunc)plugin->Logger, | ||
}; | ||
if (OutputPreRegisterLogger(reg_data) != 0) { | ||
return 1; | ||
} | ||
} | ||
return 0; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@victorjulien Any thoughts on this (minus the plugin stuff in the name) becoming the standard way of registering an app-layer?
IMO there should be no difference in registration whether or not an app-layer is a plugin or not, the only differentiator is where it comes from - dynamically or statically loaded. Simplifies documentation, means we eat our own dog food, etc.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would like to try to have SNMP follow this later.
For now, I wonder if I should split this PR to make it simpler.
There are 3 things :
- use dynamic number of app-layer protos
- fuzz proto detect fix (in init)
- plugins
Let me know if I should just take the one or 2 first items...
WARNING: ERROR: QA failed on SURI_TLPR1_alerts_cmp.
Pipeline 23423 |
Next in #12163 |
Link to ticket: https://redmine.openinfosecfoundation.org/issues/
https://redmine.openinfosecfoundation.org/issues/5053
Describe changes:
#12118 with needed rebase