1 //--------------------------------------------------------------------------
2 // Copyright (C) 2014-2021 Cisco and/or its affiliates. All rights reserved.
3 //
4 // This program is free software; you can redistribute it and/or modify it
5 // under the terms of the GNU General Public License Version 2 as published
6 // by the Free Software Foundation.  You may not use, modify or distribute
7 // this program under any other version of the GNU General Public License.
8 //
9 // This program is distributed in the hope that it will be useful, but
10 // WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 // General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License along
15 // with this program; if not, write to the Free Software Foundation, Inc.,
16 // 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17 //--------------------------------------------------------------------------
18 // codec_api.cc author Josh Rosenbaum <jrosenba@cisco.com>
19 
20 #ifdef HAVE_CONFIG_H
21 #include "config.h"
22 #endif
23 
24 #include "codec_api.h"
25 
26 #include "framework/codec.h"
27 #include "managers/plugin_manager.h"
28 
29 using namespace snort;
30 
31 extern const BaseApi* cd_ipv4[];    // static due to dependence on fpdetect
32 extern const BaseApi* cd_hopopts[]; // static to ensure the symbols CheckIPV6HopOptions
33                                     // and CheckIPv6ExtensionOrder the final executable.
34 extern const BaseApi* cd_tcp[];     // static because only file that specific functions
35                                     // (symbols will be removed from final executable)
36 
37 #ifdef STATIC_CODECS
38 extern const BaseApi* cd_ah[];
39 extern const BaseApi* cd_arp[];
40 extern const BaseApi* cd_bad_proto[];
41 extern const BaseApi* cd_ciscometadata[];
42 extern const BaseApi* cd_dstopts[];
43 extern const BaseApi* cd_erspan2[];
44 extern const BaseApi* cd_erspan3[];
45 extern const BaseApi* cd_esp[];
46 extern const BaseApi* cd_eth[];
47 extern const BaseApi* cd_fabricpath[];
48 extern const BaseApi* cd_frag[];
49 extern const BaseApi* cd_geneve[];
50 extern const BaseApi* cd_gre[];
51 extern const BaseApi* cd_gtp[];
52 extern const BaseApi* cd_icmp4[];
53 extern const BaseApi* cd_icmp4_ip[];
54 extern const BaseApi* cd_icmp6[];
55 extern const BaseApi* cd_icmp6_ip[];
56 extern const BaseApi* cd_ipv6[];
57 extern const BaseApi* cd_igmp[];
58 extern const BaseApi* cd_llc[];
59 extern const BaseApi* cd_mobility[];
60 extern const BaseApi* cd_mpls[];
61 extern const BaseApi* cd_no_next[];
62 extern const BaseApi* cd_pgm[];
63 extern const BaseApi* cd_pppencap[];
64 extern const BaseApi* cd_pppoepkt[];
65 extern const BaseApi* cd_raw[];
66 extern const BaseApi* cd_routing[];
67 extern const BaseApi* cd_teredo[];
68 extern const BaseApi* cd_transbridge[];
69 extern const BaseApi* cd_udp[];
70 extern const BaseApi* cd_user[];
71 extern const BaseApi* cd_vlan[];
72 extern const BaseApi* cd_vxlan[];
73 #endif
74 
load_codecs()75 void load_codecs()
76 {
77     PluginManager::load_plugins(cd_ipv4);
78     PluginManager::load_plugins(cd_tcp);
79     PluginManager::load_plugins(cd_hopopts);
80 
81 #ifdef STATIC_CODECS
82     PluginManager::load_plugins(cd_ah);
83     PluginManager::load_plugins(cd_arp);
84     PluginManager::load_plugins(cd_bad_proto);
85     PluginManager::load_plugins(cd_ciscometadata);
86     PluginManager::load_plugins(cd_dstopts);
87     PluginManager::load_plugins(cd_erspan2);
88     PluginManager::load_plugins(cd_erspan3);
89     PluginManager::load_plugins(cd_esp);
90     PluginManager::load_plugins(cd_eth);
91     PluginManager::load_plugins(cd_fabricpath);
92     PluginManager::load_plugins(cd_frag);
93     PluginManager::load_plugins(cd_geneve);
94     PluginManager::load_plugins(cd_gre);
95     PluginManager::load_plugins(cd_gtp);
96     PluginManager::load_plugins(cd_icmp4);
97     PluginManager::load_plugins(cd_icmp4_ip);
98     PluginManager::load_plugins(cd_icmp6);
99     PluginManager::load_plugins(cd_icmp6_ip);
100     PluginManager::load_plugins(cd_ipv6);
101     PluginManager::load_plugins(cd_igmp);
102     PluginManager::load_plugins(cd_llc);
103     PluginManager::load_plugins(cd_mobility);
104     PluginManager::load_plugins(cd_mpls);
105     PluginManager::load_plugins(cd_no_next);
106     PluginManager::load_plugins(cd_pgm);
107     PluginManager::load_plugins(cd_pppencap);
108     PluginManager::load_plugins(cd_pppoepkt);
109     PluginManager::load_plugins(cd_raw);
110     PluginManager::load_plugins(cd_routing);
111     PluginManager::load_plugins(cd_teredo);
112     PluginManager::load_plugins(cd_transbridge);
113     PluginManager::load_plugins(cd_udp);
114     PluginManager::load_plugins(cd_user);
115     PluginManager::load_plugins(cd_vlan);
116     PluginManager::load_plugins(cd_vxlan);
117 #endif
118 }
119 
120