Compare commits

...
4 Commits
15 changed files with 1174 additions and 66 deletions

No files matched your search

+4 -1
View File
@@ -26,7 +26,10 @@
"problemMatcher": {
"base": "$gcc",
"fileLocation": "relative"
"fileLocation": [
"relative",
"${workspaceFolder}"
]
},
"presentation": {
"echo": true,
+1 -1
View File
@@ -1 +1 @@
set(sources ;cmds/CmdRegistry.cpp;cmds/ConfigCheck.cpp;cmds/Help.cpp;cmds/Md.cpp;cmds/Run.cpp;cmds/RunSim.cpp;cmds/Test.cpp;cmds/TestCeloxica.cpp;cmds/TestOrderman.cpp;event_grid/EventNode.cpp;exchange_sim/Application.cpp;exchange_sim/ExchangeSim.cpp;exchange_sim/Market.cpp;jetfix/codec/FIXArray.cpp;jetfix/common/OutFIX.cpp;jetfix/connection/AsyncReader.cpp;jetfix/connection/IConnection.cpp;jetfix/connection/SocketConnection.cpp;jetfix/gateway/CoreGateway.cpp;jetfix/gateway/JetFIXGateway.cpp;jetfix/gateway/Session.cpp;jetfix/store/FIXFileStore.cpp;jetfix/store/session_name.cpp;jetfix/tests/async_reader_tests.cpp;jetfix/tests/decoding_tests.cpp;jetfix/tests/fix_encoding_stream_tests.cpp;jetfix/tests/fix_fragment_tests.cpp;jetfix/tests/jetfix_performance_tests.cpp;jetfix/tests/store_tests.cpp;main.cpp;md/platforms/celoxica/CXListener.cpp;md/platforms/celoxica/CXMain.cpp;md/platforms/celoxica/tests/cx_tests.cpp;md/platforms/mdp3_onixs/MDP3Listener.cpp;md/platforms/mdp3_onixs/MDP3Main.cpp;md/platforms/mdp3_onixs/MDP3Utils.cpp;md/platforms/mdp3_onixs/tests/mdp3_tests.cpp;md/run_md.cpp;orderman/components/FillRecorder.cpp;orderman/components/Gateway.cpp;orderman/components/MDSource.cpp;orderman/components/NativeOrderMan.cpp;orderman/components/OrderRecorder.cpp;orderman/components/SpreaderOrderMan.cpp;orderman/events/ExecutionReport.cpp;orderman/events/NativeOrderStateChange.cpp;orderman/events/SpreaderOrderStateChange.cpp;orderman/events/TimeChange.cpp;orderman/native_orders/NativeOrder.cpp;orderman/native_orders/NativeOrderBuilder.cpp;orderman/native_orders/NativeOrderFactory.cpp;orderman/persistence/FillDB.cpp;orderman/persistence/OrderDB.cpp;orderman/persistence/gen_order_id.cpp;orderman/service/OrderServiceServer.cpp;orderman/spreader_orders/SpreaderOrder.cpp;orderman/spreader_orders/SpreaderOrderBase.cpp;orderman/tests/spreader_order_tests.cpp;orderman/utils/fix_order_codec.cpp;orderman/utils/orderman_utils.cpp;persistence/IStore.cpp;persistence/PersistenceServiceServer.cpp;persistence/SqliteStore.cpp;persistence/tests/PersistenceServiceTests.cpp;risk_limits/IRiskLimitObserver.cpp;risk_limits/RiskLimitManager.cpp;risk_limits/RiskLimiter.cpp;risk_limits/SharedRiskLimiter.cpp;risk_limits/SymbolKey.cpp;risk_limits/tests/RiskLimitsTests.cpp;securities/SecurityDB.cpp;spreader/QuoteLegPriceQuantityState.cpp;spreader/SingleFillHedger.cpp;spreader/SingleLegQuoter.cpp;spreader/SpreaderBase.cpp;testing/catch_test_runner.cpp;user/UserServiceServer.cpp)
set(sources ;cmds/Celoxica.cpp;cmds/CmdRegistry.cpp;cmds/ConfigCheck.cpp;cmds/Help.cpp;cmds/Md.cpp;cmds/Run.cpp;cmds/RunSim.cpp;cmds/Test.cpp;cmds/TestOrderman.cpp;event_grid/EventNode.cpp;exchange_sim/Application.cpp;exchange_sim/ExchangeSim.cpp;exchange_sim/Market.cpp;jetfix/codec/FIXArray.cpp;jetfix/common/OutFIX.cpp;jetfix/connection/AsyncReader.cpp;jetfix/connection/IConnection.cpp;jetfix/connection/SocketConnection.cpp;jetfix/gateway/CoreGateway.cpp;jetfix/gateway/JetFIXGateway.cpp;jetfix/gateway/Session.cpp;jetfix/store/FIXFileStore.cpp;jetfix/store/session_name.cpp;jetfix/tests/async_reader_tests.cpp;jetfix/tests/decoding_tests.cpp;jetfix/tests/fix_encoding_stream_tests.cpp;jetfix/tests/fix_fragment_tests.cpp;jetfix/tests/jetfix_performance_tests.cpp;jetfix/tests/store_tests.cpp;main.cpp;md/platforms/celoxica/CXListener.cpp;md/platforms/celoxica/CXMain.cpp;md/platforms/celoxica/tests/cx_tests.cpp;md/platforms/mdp3_onixs/MDP3Listener.cpp;md/platforms/mdp3_onixs/MDP3Main.cpp;md/platforms/mdp3_onixs/MDP3Utils.cpp;md/platforms/mdp3_onixs/tests/mdp3_tests.cpp;md/run_md.cpp;orderman/components/FillRecorder.cpp;orderman/components/Gateway.cpp;orderman/components/MDSource.cpp;orderman/components/NativeOrderMan.cpp;orderman/components/OrderRecorder.cpp;orderman/components/SpreaderOrderMan.cpp;orderman/events/ExecutionReport.cpp;orderman/events/NativeOrderStateChange.cpp;orderman/events/SpreaderOrderStateChange.cpp;orderman/events/TimeChange.cpp;orderman/native_orders/NativeOrder.cpp;orderman/native_orders/NativeOrderBuilder.cpp;orderman/native_orders/NativeOrderFactory.cpp;orderman/persistence/FillDB.cpp;orderman/persistence/OrderDB.cpp;orderman/persistence/gen_order_id.cpp;orderman/service/OrderServiceServer.cpp;orderman/spreader_orders/SpreaderOrder.cpp;orderman/spreader_orders/SpreaderOrderBase.cpp;orderman/tests/spreader_order_tests.cpp;orderman/utils/fix_order_codec.cpp;orderman/utils/orderman_utils.cpp;persistence/IStore.cpp;persistence/PersistenceServiceServer.cpp;persistence/SqliteStore.cpp;persistence/tests/PersistenceServiceTests.cpp;risk_limits/IRiskLimitObserver.cpp;risk_limits/RiskLimitManager.cpp;risk_limits/RiskLimiter.cpp;risk_limits/SharedRiskLimiter.cpp;risk_limits/SymbolKey.cpp;risk_limits/tests/RiskLimitsTests.cpp;securities/SecurityDB.cpp;spreader/QuoteLegPriceQuantityState.cpp;spreader/SingleFillHedger.cpp;spreader/SingleLegQuoter.cpp;spreader/SpreaderBase.cpp;testing/catch_test_runner.cpp;user/UserServiceServer.cpp)
+5 -1
View File
@@ -26,6 +26,9 @@ add_executable(sparkd ${Sparkd_Sources} ${Proto_Srcs})
#include paths
target_include_directories( sparkd PUBLIC ${CMAKE_SOURCE_DIR}/src ${CMAKE_BINARY_DIR}/src)
#celoxica stuff
include(${CMAKE_SOURCE_DIR}/tools/celoxica.cmake)
# linking
target_link_libraries( sparkd
spark_lib
@@ -34,12 +37,13 @@ target_link_libraries( sparkd
pugixml
onixs-cmemdh-all-4.3.0
quickfix
${CELOXICA_LIB}
-static-libgcc
-static-libstdc++
-pthread)
# copy test data
file(COPY jetfix/tests/sample_fix.dat DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/test_data)
@@ -1,4 +1,4 @@
#include "TestCeloxica.h"
#include "Celoxica.h"
#include "server/sparkd/md/platforms/celoxica/CXMain.h"
#include "server/sparkd/md/platforms/celoxica/CXListener.h"
@@ -8,14 +8,14 @@ namespace bts
namespace cmd
{
int TestCeloxica::execute(const std::vector<std::string>&)
int Celoxica::execute(const std::vector<std::string>&)
{
bts::md::CXMain main;
main.initialize();
return 0;
}
std::string TestCeloxica::help()
std::string Celoxica::help()
{
return "\t test BTS <> Celoxica integration \n";
}
@@ -7,7 +7,7 @@ namespace bts
namespace cmd
{
class TestCeloxica : public ICmd
class Celoxica : public ICmd
{
public:
int execute(std::vector<std::string> const &args);
+2 -2
View File
@@ -15,7 +15,7 @@
#include "server/sparkd/cmds/Run.h"
#include "server/sparkd/cmds/Help.h"
#include "server/sparkd/cmds/TestOrderman.h"
#include "server/sparkd/cmds/TestCeloxica.h"
#include "server/sparkd/cmds/Celoxica.h"
#include "server/sparkd/cmds/Md.h"
#include "server/sparkd/cmds/ConfigCheck.h"
#include "server/sparkd/cmds/RunSim.h"
@@ -34,7 +34,7 @@ int main( int argc, const char*argv[] )
REGISTER (Run);
REGISTER (Md);
REGISTER (TestOrderman);
REGISTER (TestCeloxica);
REGISTER (Celoxica);
REGISTER (ConfigCheck);
REGISTER (RunSim);
END_CMD;
@@ -6,7 +6,6 @@
#include <tuple>
namespace celoxica { namespace gmac {} }
#include "celoxica.h"
using namespace celoxica::gmac;
using namespace std;
using namespace bts::md2;
@@ -49,6 +48,10 @@ void CXListener::add_software_filter(const std::string& symbol)
//for (const auto& str : _symbol_filter_storage) {
// _symbol_filter.insert(onixs::StringRef(str));
//}
}
void CXListener::heartbeat()
{
}
void CXListener::on_GMACMessageOrderDepthV3(const GMACMessageOrderDepthV3*)
@@ -4,6 +4,7 @@
#include "lib/md/coconut2.h"
#include "lib/utils/Dispatcher.h"
#include "server/sparkd/md/platforms/celoxica/CXSecurityIndex.h"
#include "celoxica.h"
#include <tbb/concurrent_queue.h>
#include <vector>
@@ -13,8 +14,6 @@ namespace bts
{
namespace md
{
struct GMACMessageOrderDepthV3;
class CXListener
{
public:
@@ -23,8 +22,10 @@ public:
~CXListener();
void add_software_filter(const std::string& symbol);
void heartbeat();
void on_GMACMessageOrderDepthV3(const GMACMessageOrderDepthV3*);
public:
void on_GMACMessageOrderDepthV3(const celoxica::gmac::GMACMessageOrderDepthV3*);
private:
void flush_books();
@@ -11,15 +11,9 @@
#include "lib/config/protos/MarketData.pb.h"
#include "lib/config/protos/system.pb.h"
namespace celoxica { namespace gmac {} }
#include "celoxica.h"
extern "C"
{
#define __retcode_start__
#define __retcode_end__
}
#include <signal.h>
#include <memory>
#include <set>
@@ -27,56 +21,232 @@ using namespace std;
using namespace bts::md2;
using namespace celoxica::gmac;
using ChannelMap = boost::container::flat_map<int, GMACChannelID>;
namespace bts
{
namespace md
{
void run_cx_server(UserSymbol* psyms, size_t symcount)
//void run_cx_server(UserSymbol* psyms, size_t symcount)
//{
// CXMain main;
// vector<UserSymbol> symbols;
// for(size_t x = 0; x < symcount; ++x) {
// symbols.push_back(psyms[x]);
// }
// main.run(symbols);
//}
class CXInit
{
CXMain main;
vector<UserSymbol> symbols;
for(size_t x = 0; x < symcount; ++x) {
symbols.push_back(psyms[x]);
public:
CXInit() : gmac(), queue_count(0)
{
signal(SIGINT, &CXInit::signal_stop);
GMACIdentify(stdout);
ConfigStatus cfg_status;
ConfigSetDefaultErrorHandler();
Config* cfg;
ConfigOpen(&cfg);
std::string file = "./gmac.cfg";
if((cfg_status = ConfigParseFile(cfg, file.c_str())) != CONFIG_STATUS_OK)
{
LOG(MarketData, Error, "CX_CME: Unable to parse config file {} {} {}",
file, cfg_status, std::string(ConfigStatusToString(cfg_status)));
bts_assert_msg(false, "unable to configure gmac");
}
GMACStatus status = GMACOpen(&gmac, ConfigOption(cfg, "GMAC"));
ConfigClose(cfg);
if(status != GMAC_STATUS_OK)
{
LOG(MarketData, Error, "CX_CME: Unable to open gmac {}", std::string(GMACStatusToString(status)));
bts_assert_msg(false, "unable to open gmac ");
}
GMACRegisterErrorHandler(gmac, &handle_error);
}
main.run(symbols);
}
static GMACStatus handle_error(GMACHandle* gmac, GMACStatus status_code,
const char *function, const char *msg)
{
UNUSED(gmac);
LOG(MarketData, Warn, "CX_CME: GMac Error {} ({} {})", std::string(GMACStatusToString(status_code)),
std::string(function), std::string(msg));
return status_code;
}
static void signal_stop(int signal = 0)
{
UNUSED(signal);
stop_flag = true;
}
int reserve_queue()
{
return queue_count++;
}
~CXInit()
{
GMACClose(gmac);
}
GMACHandle* gmac;
int queue_count;
static bool stop_flag;
};
bool CXInit::stop_flag = false;
CXMain::CXMain() :
_producer(co2::PLATFORM_CELOXICA),
_security_recorder(),
_settlement_recorder(co2::PLATFORM_CELOXICA),
_listeners()
{
_listeners(),
_queue_id()
{
}
CXMain::~CXMain() {}
void CXMain::initialize()
CXInit* CXMain::initialize()
{
//celoxica::gmac::GMACIdentify(stderr);
//const auto& options = config::get<CMEOptions>();
static CXInit init;
_queue_id = init.reserve_queue();
return &init;
}
void build_channel_map(CXInit* init, ChannelMap& channel_map)
{
GMACObjID market_id = 0;
GMACObjID channels[MAX_MULTICASTS];
uint32_t count = 0;
GMACStatus status = GMACGetObjList(init->gmac, GMAC_OBJ_MARKET, market_id, GMAC_OBJ_SRC_CHANNEL, channels,
&count, sizeof(channels) / sizeof(channels[0]));
if(status != GMAC_STATUS_OK)
{
LOG(MarketData, Error, "Fail on GMACGetObjList(channels) {}", std::string(GMACStatusToString(status)));
bts_assert_msg(false, "Fail on GMACGetObjList(channels)");
}
for(uint32_t i = 0; i < count; i++)
{
GMACStats *stats; //all sorts of statistics about the multicast
status = GMACStatsMulticast(init->gmac, channels[i], &stats);
if(status == GMAC_STATUS_OK)
channel_map[stats->LocalChannelID] = channels[i];
}
}
void CXMain::run(std::vector<UserSymbol>& symbols)
{
bts::md::await_cme_config();
initialize();
await_cme_config();
CXInit* init = initialize();
parse_channels(symbols);
// const auto& channels = parse_channels(symbols);
//TODO clean up this channel madness
ChannelMap channel_map;
build_channel_map(init, channel_map);
const auto& channels = parse_channels(symbols);
for(const auto& channel : channels)
{
auto ci = channel_map.find(atoi(channel.id.c_str()));
if(ci != channel_map.end())
{
_listeners[ci->second] = prepare_listener(channel);
std::stringstream symstr;
for(const auto& sym : channel.symbols) { symstr << sym.symbol() << "-" << SecurityType_Name(sym.type()) << " "; }
LOG(MarketData, Info, "CX_CME: Initialized channel {} ({})", channel.id, symstr.str());
}
}
auto& disp = utils::Dispatcher::current();
utils::DispatcherTimer security_timer(disp, 500, [&]() {
_security_recorder.do_work();
});
security_timer.start();
utils::DispatcherTimer spread_resolve_timer(disp, 1000, [&]() {
_index.resolve_spreads();
});
spread_resolve_timer.start();
utils::DispatcherTimer settlement_timer(disp, 100, [&]() {
_settlement_recorder.do_work();
});
settlement_timer.start();
utils::DispatcherTimer heartbeat_timer(disp, 250, [&]() {
for(const auto& listener : _listeners) {
listener.second->heartbeat();
}
});
heartbeat_timer.start();
auto& message_disp = utils::Dispatcher::create_new("CXDispatcher");
message_disp.post([&]() { dispatch_loop(init); });
message_disp.run();
LOG(MarketData, Info, "** CX_CME Publisher started **");
disp.run();
}
std::unique_ptr<CXListener> CXMain::prepare_listener(const std::string& channel, const CMEChannel&)
std::unique_ptr<CXListener> CXMain::prepare_listener(const CMEChannel& channel)
{
UNUSED(channel);
return std::unique_ptr<CXListener>();
}
void CXMain::dispatch_loop(CXInit* init)
{
GMACStatus st = GMACQueueInit(init->gmac, _queue_id, _queue_id /*TODO queue to cpu mapping*/);
if(GMAC_STATUS_OK != st)
{
LOG(MarketData, Error, "CX_CME: Unable to open GMAC queue {}", _queue_id);
init->stop_flag = true;
}
while(!init->stop_flag)
{
char* data; GMACChannelID channel;
st = GMACQueueRead(init->gmac, _queue_id, &data, &channel);
if(st == GMAC_STATUS_NODATA)
continue; //if there are no data, keep polling
process_message(data, channel);
GMACQueueRelease(init->gmac, data);
}
GMACQueueClose(init->gmac, _queue_id);
}
#define PRINT_BOOK_UPDATE(str, ...) do { printf("TOB_BOOK_UPDATE: " str, ## __VA_ARGS__); } while(0)
void CXMain::process_message(char* data, GMACChannelID channel)
{
UNUSED(channel);
GMACPacketHeader* header = (GMACPacketHeader*)data; //packet header is always at the beginning of the data payload
data += sizeof(GMACPacketHeader); //advance further
for(uint32_t i = 0; i < header->TranscodedMessages; i++)
{
//message header is first in all message structures, so it is safe to cast the mesasge to the header
GMACMessageHeader *msg = (GMACMessageHeader*)data;
data += msg->Length + msg->ExtensionsLength; //advance the reading pointer
switch(msg->MsgType)
{
case GMAC_TYPE_ORDER_DEPTH_V3:// needed for book driven feed
{
GMACMessageOrderDepthV3* m = (GMACMessageOrderDepthV3*)msg;
PRINT_BOOK_UPDATE("N %2d %-16lu %-16lu \n", m->Side, m->Quantity, m->Price);
}
}
}
}
int CXMain::test_init()
{
std::vector<UserSymbol> symbols;
symbols.push_back(UserSymbol("ES", api::VENUE_GLBX, api::SECURITYTYPE_FUTURE));
run(symbols);
return 0;
}
}
}
@@ -7,16 +7,27 @@
#include <memory>
#include <vector>
#include <map>
#include <boost/container/flat_map.hpp>
namespace celoxica
{
namespace gmac
{
struct __GMACHandle;
typedef struct __GMACHandle GMACHandle;
typedef uint32_t GMACChannelID;
}
}
namespace bts
{
namespace cmd { class Celoxica; }
namespace md
{
void run_cx_server(md2::UserSymbol* sym, size_t symcount);
struct CMEChannel;
class CXListener;
class CXInit;
/*
* The CX provider is very simple. 1 CXMain maps to 1 Celoxica Queue, which maps to 1 thread and one bound CPU.
@@ -30,10 +41,17 @@ public:
CXMain();
~CXMain();
void run(std::vector<md2::UserSymbol>&); //call initialize, start the pump
void initialize(); //set up channels, etc
void run(std::vector<md2::UserSymbol>&);
std::unique_ptr<CXListener> prepare_listener(const std::string& channel, const CMEChannel&);
private:
std::unique_ptr<CXListener> prepare_listener(const CMEChannel&);
CXInit* initialize();
void dispatch_loop(CXInit* init);
void process_message(char* data, celoxica::gmac::GMACChannelID);
private:
friend class bts::cmd::Celoxica;
int test_init();
private:
BTS_NO_COPY(CXMain);
@@ -42,7 +60,9 @@ private:
md2::MDProducer _producer;
md2::SecurityIDRecorder _security_recorder;
co2::SettlementRecorder _settlement_recorder;
std::vector<std::unique_ptr<CXListener>> _listeners;
boost::container::flat_map<celoxica::gmac::GMACChannelID, std::unique_ptr<CXListener>> _listeners;
int _queue_id;
};
}}//namespace
@@ -5,9 +5,11 @@ namespace celoxica
namespace gmac
{
#include "celoxica/gmac.h"
#include "celoxica/objects.h"
#include "celoxica/gmac_template_v3.h"
#include "celoxica/gmac_info.h"
#include "celoxica/gmac_stats.h"
#include "celoxica/cpu_timestamp.h"
}
}
@@ -0,0 +1,771 @@
<!-- NOTE : GXA now has it's own DTD -->
<!ELEMENT config ( amdc| amdd-itch| filters| gmac| book| lmeasure| amdd-oprav2| streamer| instruments| test | gxa | datafiles | amdd-ise| amdd-dummy | amdd-ice| timediff | amdd-cme| amdd-cme2 | amdd-cmed | amdd-lse | amdd-socket| amdd-opra | streamer-opra| amdd-kit| streamer-ise | air | fix | parameters | gxa-lite)+ >
<!ELEMENT amdc ( core-decoder| core-user| cpu| cpu_main | mlockall | maxspeed | lldttruncmask | schedfifo | sched-fifo-user| sched-fifo-decoder| latency-sampling-rate| verbosity| wait-for-link| router_0| router_1| subscriber_0 | subscriber_1| memory-lock| irq-mask| cpu-speed-max| stats-file| bufferpool| board-number| latency-sampling-rate| timeout-user| consumers| logfile| decoder-start-hold| disable-timestamps| register-signal-handler | reorder-table-size | bd-reorder-table-size | reorder-timeout| lldtmtu | schedfifo_main | statsfile | margin | arbitrage)+ >
<!ELEMENT gmac ( shm-prefix | verbosity| ade-verbosity | debug-mask | ade-logfile | ade-reader-affinity | ade-reader-queue-size | vlan-toe| reorder-timeout-ns | reorder-max | bufferpool| recovery|
recovery-affinity| recovery-logfile| recovery-log-socket| recovery-log-level | subscription| markets| simulated-dropping-chance |
simulated-dropping-gap-range | simulated-dropping-pass-alternate | simulated-dropping-on-signal |
simulated-dropping-logfile | dumping-threads-affinity | dumping-threads-buffer-size | dumping-folder | input-user |
recovery-reconnect-max-retries | recovery-reconnect-backoff-min-seconds | recovery-reconnect-backoff-max-seconds | logfile | max-hw-waiting-packets | recovery-reconnect-no-immediate |
force-raw-operation | multicast-timeout-us| reissue-subscriptions | latency-measurement | recovery-async-read-timeout-ms |
recovery-async-read-buffer-size | hardware-filtering | print-absent-fields | send-multicast-timeout-messages |
other-affinity | register-affinity | register-directory | register-no-sigabrt | normalised-messages | normalized-messages |
ade-dump-file-name | ade-dump-max-interval-us | ade-dump-max-packets | ade-dump-on-payload-error )* >
<!ELEMENT monitor ( nb-worker | worker-start-port | zmq-pub-string | zmq-router-string )* >
<!ELEMENT fix ( channels | parameters )* >
<!ELEMENT book ( verbosity| max-queues | cpus | updates-bufferpool | datareferential | gmac | deepbook | order-buffer-size | uncross-user-log-enabled |
sched-fifo-priority | ob-debug-check-refresh | ob-debug-log-level | refresh-cycles-max | refresh-on-maximum-gap )* >
<!ELEMENT air ( arca-fill-format | air-gateway | air-server | air-vlan | driver-cpu | driver-logfile | logfile | logging-mode | logon-timeout |
log-shm-key | log-size | log-alt-file | log-level | log-name |
max-instruments | max-limit-databases | max-nb-markets | limit-granularity | shkey-file | shm-dir | shqsize |
session-config-path | standalone | verbosity )+ >
<!ELEMENT lmeasure ( ip-dst-0 | ip-dst-1 | udp-port-dst-0 | udp-port-dst-1 )* >
<!ELEMENT router_0 ( vlan| ether| iplist| ip| l4portlist| l4port )* >
<!ELEMENT router_1 ( vlan| ether| iplist| ip| l4portlist| l4port )* >
<!ELEMENT ip ( #PCDATA | rule-info )* >
<!ELEMENT rule-info ( #PCDATA | address-info | portno )* >
<!ELEMENT subscriber_0 ( #PCDATA | group-info )* >
<!ELEMENT subscriber_1 ( #PCDATA | group-info )* >
<!ELEMENT filters ( filter_char_bitmap| filter_symbolorder | filter_string_trie | filter_uint_hash | filter_stringspace_trie | filter_uint_hasha | filter_uint_hashb | filter_specific1 | filter_string_hashb )* >
<!ELEMENT recovery ( #PCDATA| recovery-enabled| ip| port| ucas| ucap| usap| trader-id| participant-code | host | link | timeout-base | timeout-rate | time-to-retry | timeout-connect | embedsrcaddr | channel )* >
<!ELEMENT secondary-recovery ( channel* ) >
<!ELEMENT long-recovery ( link* ) >
<!ELEMENT refresh ( #PCDATA| link )* >
<!ELEMENT refresh-enabled ( #PCDATA ) >
<!ELEMENT snapshot-enabled ( #PCDATA ) >
<!ELEMENT trades-enabled ( #PCDATA ) >
<!ELEMENT channel-definition-file ( #PCDATA ) >
<!ELEMENT source-message-logfile (#PCDATA) >
<!ELEMENT latency-measurement ( #PCDATA ) >
<!ELEMENT ade-dump-file-name ( #PCDATA ) >
<!ELEMENT ade-dump-max-interval-us ( #PCDATA ) >
<!ELEMENT ade-dump-max-packets ( #PCDATA ) >
<!ELEMENT ade-dump-on-payload-error ( #PCDATA ) >
<!ELEMENT firm-quote ( #PCDATA ) >
<!ELEMENT ignore-slow-quote ( #PCDATA ) >
<!ELEMENT value ( #PCDATA ) >
<!ELEMENT length ( #PCDATA ) >
<!ELEMENT market-hours ( #PCDATA ) >
<!ELEMENT market-prefix ( #PCDATA ) >
<!ELEMENT max-payload ( #PCDATA ) >
<!ELEMENT print-absent-fields ( #PCDATA ) >
<!ELEMENT market ( #PCDATA | max-payload | market-hours | market-prefix | value | length | channels | authentications | referentials | arbitrage-mode |
maximum-gap | max-reg-gap | packet-timeout-ms | connect-wait-sec |
task-time-ms-to-live | task-time-ms-to-retry | task-number-of-retries | recovery | secondary-recovery |
long-recovery | refresh | refresh-enabled | snapshot-enabled | trades-enabled | channel-definition-file | source-message-logfile |
start-seq | instrument-index-type | backoff-period | gateway-ip | credentials | market-mode |
loglevel | omit-blockcheck | periods | grp | verbosity | refreshpacket-timeout-ms |
maxsymbols | dump | dumpdir | no-make-dumps | embedsrcaddr | retransmissions | snapshots | secondary-snapshots |
parameters | logging-sockets | port | ip | connect-timeout | logfile | ignore-slow-quote |
source-id | livegroups | markettypes | subscriptions |
tcp_server | use-dumps | password | time-zone | expect-repackaged | v3 | symbol-ref-file | write-symbol-ref-file | symbol-ref-queue |
test | exchange-timestamp | extension-messages | defaults | venue-ids | firm-quote |
drop-unknown-instruments | use-order-depth-multiple | get-index-map | force-local-port | venue-filtering |
depth-mode | preferred-interface | preferred-channel | hardware-filtering | hardware-arbitrage | socket-max-retries |
socket-max-retries-us | socket-backoff-period-s | remove-routed-trades | normal-hours-orders-only | product | product-name | book-type |
max-buffer-timeout-ns | max-channel-buffer | debug-mask | reconnect-timeout | number-of-retries | gap-timeout | max-hw-waiting-packets |
version | trading-status-monitoring | ignore-trade-messages | enable-order-executed-trades | use-symbols | generate-referential | legacy-mode | normalised-messages | normalized-messages )* >
<!ELEMENT defaults ( price-denominator | price-nominator | currency | lot-size)* >
<!ELEMENT tcp_server ( tcp-recovery-enabled | host | port | login | pwd | strip-info )* >
<!ELEMENT credentials ( username | password | keyid | deskey | operatingenvironment | sender | sendercompid )* >
<!ELEMENT parameters ( recoveryip | recoveryport | secondaryrecoveryip | secondaryrecoveryport | secondaryip | secondaryport | account | account-prefix | application-system-name | application-system-vendor | application-system-version | ask-for-ref | auto-connect |
auto-increment | auto-reconnect | branch | cancel-on-disconnect | capacity | checkalive-timeout-s | clearing-instruction | clearing-firm | clearing-account | clientorderid-prefix | backup-channel | client-category |
clientinfo-is-account | cti-code | customer-or-firm | customer-info | enhanced-resend-request |
deliver-to-comp-id | display | disconnect-timeout-s | eurex-ip-addr | enrichment-rule-id | exchange-info | executing-give-up-firm | fee-billing | pqttrc-file | fixtrc-file |
forward-session-rejects | groupid | generate-missing-insert-acks |
direct-electronic-access | liquidity-provision | commodity-indicator | investment-decision | execution-decision | client-id | mifid-id |
heartbeat-interval | orderint32 | ignore-dup-trades | in-flight-mitigation | init-order-id | intermarket-sweep-eligibility | max-products | login-mode |
logonid | logging-file | max-orders | max-strategies | member-id | member-sub-group | minimum-quantity | onbehalfof-comp-id |
onbehalfof-location-id | onbehalfof-sub-id | order-capacity | orderdb-size |
password | new-password | newpassword | position-effect | products | pub-period | recovery-enabled | reset-sequence | request-enrichment-rules | risk-id | risk-enabled | risk-type-override | risk-maxqty-order | seqnumber | symbol-ref-file | freetext1 | socket-path |
risk-max-tradedqty | scale-factor | self-trade-prevention | sender-sub-id | sender-comp-id | sender-location-id | target-sub-id | socket-timeout | socket-throughput | start-seq |user|firm|algo-indicator|
security-id | security-type | session-logical-id | sessionsubid | target-comp-id | discard-order-restated |
trade-input-source | traders | trader-name | trader-password | tunnel-ip | user-appl-id | username | verbosity |
orderid-type | gtc-file | host | large-difference-check | price-check | port | symbol-table-size | socket-path | order-table-size |
log-shm-key | log-size | log-alt-file | log-level | cpus | udp-cnx-port | use-v3-neworder | sessions-per-thread | thread-pool-size | rules-file | wide-spread-check)* >
<!ELEMENT branch ( #PCDATA ) >
<!ELEMENT position-effect ( #PCDATA ) >
<!ELEMENT trader ( #PCDATA | trader-name | trader-password )* >
<!ELEMENT executing-give-up-firm ( #PCDATA ) >
<!ELEMENT enrichment-rule-id ( #PCDATA ) >
<!ELEMENT customer-info ( #PCDATA ) >
<!ELEMENT enhanced-resend-request ( #PCDATA ) >
<!ELEMENT exchange-info ( #PCDATA ) >
<!ELEMENT login-mode ( #PCDATA ) >
<!ELEMENT socket-max-retries ( #PCDATA ) >
<!ELEMENT socket-max-retries-us ( #PCDATA ) >
<!ELEMENT socket-backoff-period-s ( #PCDATA ) >
<!ELEMENT match-info ( #PCDATA | segment-list | currency-list )* >
<!ELEMENT grp ( ssid | host | port | login | pwd )* >
<!ELEMENT depth-mode ( #PCDATA )* >
<!ELEMENT preferred-interface ( #PCDATA )* >
<!ELEMENT preferred-channel ( #PCDATA )* >
<!ELEMENT remove-routed-trades ( #PCDATA ) >
<!ELEMENT normal-hours-orders-only ( #PCDATA ) >
<!ELEMENT max-strategies ( #PCDATA ) >
<!ELEMENT ignore-dup-trades ( #PCDATA ) >
<!ELEMENT book-type ( #PCDATA ) >
<!-- AMDC -->
<!ELEMENT amdd-oprav2 ( bitfile )? >
<!ELEMENT amdd-kit ( bitfile )? >
<!ELEMENT amdd-lse EMPTY >
<!ELEMENT amdd-dummy ( bitfile )? >
<!ELEMENT amdd-socket ( bitfile )? >
<!ELEMENT bitfile ( #PCDATA ) >
<!ELEMENT ip-dst-0 ( #PCDATA ) >
<!ELEMENT ip-dst-1 ( #PCDATA ) >
<!ELEMENT udp-port-dst-0 ( #PCDATA ) >
<!ELEMENT udp-port-dst-1 ( #PCDATA ) >
<!ELEMENT core-decoder ( #PCDATA ) >
<!ELEMENT core-user ( #PCDATA ) >
<!ELEMENT sched-fifo-user ( #PCDATA ) >
<!ELEMENT sched-fifo-decoder ( #PCDATA ) >
<!ELEMENT wait-for-link ( link )* >
<!ELEMENT memory-lock ( #PCDATA ) >
<!ELEMENT irq-mask ( #PCDATA ) >
<!ELEMENT cpu-speed-max ( #PCDATA ) >
<!ELEMENT stats-file ( #PCDATA ) >
<!ELEMENT bufferpool ( #PCDATA ) >
<!ELEMENT reorder-max ( #PCDATA ) >
<!ELEMENT reorder-timeout-ns ( #PCDATA ) >
<!ELEMENT reorder-timeout ( #PCDATA ) >
<!ELEMENT board-number ( #PCDATA ) >
<!ELEMENT latency-sampling-rate ( #PCDATA ) >
<!ELEMENT timeout-user ( #PCDATA ) >
<!ELEMENT consumers ( #PCDATA ) >
<!ELEMENT logfile ( #PCDATA ) >
<!ELEMENT decoder-start-hold ( #PCDATA ) >
<!ELEMENT disable-timestamps ( #PCDATA ) >
<!ELEMENT cpu_main ( #PCDATA ) >
<!ELEMENT mlockall ( #PCDATA ) >
<!ELEMENT schedfifo ( #PCDATA ) >
<!ELEMENT maxspeed ( #PCDATA ) >
<!ELEMENT lldttruncmask ( #PCDATA ) >
<!ELEMENT schedfifo_main ( #PCDATA ) >
<!ELEMENT statsfile ( #PCDATA ) >
<!ELEMENT margin ( #PCDATA ) >
<!ELEMENT lldtmtu ( link )* >
<!ELEMENT reorder-table-size ( #PCDATA ) >
<!ELEMENT bd-reorder-table-size ( #PCDATA ) >
<!ELEMENT ether ( rule-info )* >
<!ELEMENT l4port ( rule-info )* >
<!ELEMENT l4portlist ( rule-info )* >
<!ELEMENT iplist ( rule-info )* >
<!ELEMENT link ( #PCDATA ) >
<!ELEMENT address-info ( #PCDATA ) >
<!ELEMENT portno ( #PCDATA ) >
<!ELEMENT vlan ( rule-info )* >
<!ELEMENT filter_char_bitmap ( #PCDATA ) >
<!ELEMENT filter_string_trie ( #PCDATA ) >
<!ELEMENT filter_symbolorder ( #PCDATA ) >
<!ELEMENT filter_uint_hash ( #PCDATA ) >
<!ELEMENT filter_stringspace_trie ( #PCDATA ) >
<!ELEMENT filter_uint_hasha ( #PCDATA ) >
<!ELEMENT filter_uint_hashb ( #PCDATA ) >
<!ELEMENT filter_specific1 ( #PCDATA ) >
<!ELEMENT filter_string_hashb ( #PCDATA ) >
<!-- End Of AMDC -->
<!-- GMAC Note: for the lists (e.g. channels/channel) update parse.c:isList() as well -->
<!ELEMENT channels ( channel+ ) >
<!ELEMENT authentications ( authentication+ ) >
<!ELEMENT periods ( period+ ) >
<!ELEMENT retransmissions ( #PCDATA | channel )* >
<!ELEMENT snapshots ( #PCDATA | channel)* >
<!ELEMENT secondary-snapshots ( channel* ) >
<!ELEMENT referentials ( channel* ) >
<!ELEMENT maximum-gap (#PCDATA) >
<!ELEMENT max-reg-gap (#PCDATA) >
<!ELEMENT packet-timeout-ms (#PCDATA) >
<!ELEMENT connect-timeout (#PCDATA) >
<!ELEMENT connect-wait-sec (#PCDATA) >
<!ELEMENT task-time-ms-to-live (#PCDATA) >
<!ELEMENT task-time-ms-to-retry (#PCDATA) >
<!ELEMENT refreshpacket-timeout-ms (#PCDATA) >
<!ELEMENT task-number-of-retries (#PCDATA) >
<!ELEMENT vlan-toe ( #PCDATA ) >
<!ELEMENT recovery-log-socket ( #PCDATA ) >
<!ELEMENT recovery-log-level ( #PCDATA ) >
<!ELEMENT recovery-reconnect-max-retries ( #PCDATA ) >
<!ELEMENT recovery-reconnect-backoff-min-seconds ( #PCDATA ) >
<!ELEMENT recovery-reconnect-backoff-max-seconds ( #PCDATA ) >
<!ELEMENT recovery-reconnect-no-immediate ( #PCDATA ) >
<!ELEMENT input-user ( #PCDATA ) >
<!ELEMENT markets ( market+ ) >
<!ELEMENT products ( product+ ) >
<!ELEMENT product ( #PCDATA ) >
<!ELEMENT product-name ( #PCDATA ) >
<!ELEMENT force-raw-operation ( #PCDATA ) >
<!ELEMENT ucap ( #PCDATA ) >
<!ELEMENT usap ( #PCDATA ) >
<!ELEMENT arbitrage-mode ( #PCDATA ) >
<!ELEMENT timeout-base ( #PCDATA ) >
<!ELEMENT timeout-rate ( #PCDATA ) >
<!ELEMENT time-to-retry ( #PCDATA ) >
<!ELEMENT timeout-connect ( #PCDATA ) >
<!ELEMENT traders ( trader+ ) >
<!ELEMENT host ( #PCDATA ) >
<!ELEMENT channel ( #PCDATA ) >
<!ELEMENT authentication ( #PCDATA | sender-comp-id | target-comp-id | sender-sub-id | target-sub-id | username | password | linked-channel-id )* >
<!ELEMENT period ( #PCDATA ) >
<!ELEMENT price ( #PCDATA ) >
<!ELEMENT size ( #PCDATA ) >
<!ELEMENT price-denominator ( #PCDATA ) >
<!ELEMENT price-nominator ( #PCDATA ) >
<!ELEMENT currency ( #PCDATA ) >
<!ELEMENT lot-size ( #PCDATA ) >
<!ELEMENT livegroups ( group-info )* >
<!ELEMENT live-testing ( #PCDATA ) >
<!ELEMENT subscriptions ( link )* >
<!ELEMENT markettypes ( market )* >
<!ELEMENT time-zone ( #PCDATA ) >
<!ELEMENT expect-repackaged ( #PCDATA ) >
<!ELEMENT v3 ( #PCDATA ) >
<!ELEMENT symbol-ref-file ( #PCDATA ) >
<!ELEMENT symbol-ref-queue ( #PCDATA ) >
<!ELEMENT freetext1 ( #PCDATA ) >
<!ELEMENT write-symbol-ref-file ( #PCDATA ) >
<!ELEMENT exchange-timestamp ( #PCDATA ) >
<!ELEMENT extension-messages ( #PCDATA ) >
<!ELEMENT max-hw-waiting-packets ( #PCDATA ) >
<!ELEMENT use-order-depth-multiple ( #PCDATA ) >
<!ELEMENT get-index-map ( #PCDATA ) >
<!ELEMENT login ( #PCDATA ) >
<!ELEMENT pwd ( #PCDATA ) >
<!ELEMENT ssid ( #PCDATA ) >
<!ELEMENT strip-info ( #PCDATA ) >
<!ELEMENT logging-sockets ( #PCDATA ) >
<!ELEMENT use-dumps ( #PCDATA ) >
<!ELEMENT source-id ( #PCDATA ) >
<!ELEMENT shm-prefix ( #PCDATA ) >
<!ELEMENT verbosity ( #PCDATA ) >
<!ELEMENT ade-verbosity ( #PCDATA ) >
<!ELEMENT ade-reader-affinity ( #PCDATA ) >
<!ELEMENT ade-reader-queue-size ( #PCDATA ) >
<!ELEMENT enable-priorities ( #PCDATA ) >
<!ELEMENT ade-logfile ( #PCDATA ) >
<!ELEMENT maxsymbols ( #PCDATA ) >
<!ELEMENT drop-unknown-instruments ( #PCDATA ) >
<!ELEMENT legacy-mode ( #PCDATA ) >
<!ELEMENT dump ( #PCDATA ) >
<!ELEMENT dumpdir ( #PCDATA ) >
<!ELEMENT no-make-dumps ( #PCDATA ) >
<!ELEMENT embedsrcaddr ( #PCDATA ) >
<!ELEMENT backoff-period ( #PCDATA ) >
<!ELEMENT gateway-ip ( #PCDATA ) >
<!ELEMENT loglevel ( #PCDATA ) >
<!ELEMENT omit-blockcheck ( #PCDATA ) >
<!ELEMENT participant-code ( #PCDATA ) >
<!ELEMENT sender ( #PCDATA ) >
<!ELEMENT sendercompid ( #PCDATA ) >
<!ELEMENT venue ( #PCDATA ) >
<!ELEMENT venue-ids ( venue+ ) >
<!ELEMENT multicast-timeout-us ( #PCDATA ) >
<!ELEMENT reissue-subscriptions ( #PCDATA ) >
<!ELEMENT send-multicast-timeout-messages ( #PCDATA ) >
<!ELEMENT recovery-async-read-timeout-ms ( #PCDATA ) >
<!ELEMENT recovery-async-read-buffer-size ( #PCDATA ) >
<!ELEMENT force-local-port ( #PCDATA ) >
<!ELEMENT hardware-filtering ( #PCDATA ) >
<!ELEMENT hardware-arbitrage ( #PCDATA ) >
<!ELEMENT max-channel-buffer ( #PCDATA ) >
<!ELEMENT max-buffer-timeout-ns ( #PCDATA ) >
<!ELEMENT debug-mask ( #PCDATA ) >
<!ELEMENT venue-filtering ( #PCDATA ) >
<!ELEMENT other-affinity ( #PCDATA ) >
<!ELEMENT register-affinity ( #PCDATA ) >
<!ELEMENT register-directory ( #PCDATA ) >
<!ELEMENT register-no-sigabrt ( #PCDATA ) >
<!ELEMENT normalised-messages ( #PCDATA ) >
<!ELEMENT normalized-messages ( #PCDATA ) >
<!ELEMENT reconnect-timeout ( #PCDATA ) >
<!ELEMENT number-of-retries ( #PCDATA ) >
<!ELEMENT gap-timeout ( #PCDATA ) >
<!-- gxa parameters -->
<!ELEMENT account-prefix ( #PCDATA ) >
<!ELEMENT account ( #PCDATA ) >
<!ELEMENT recoveryip ( #PCDATA ) >
<!ELEMENT recoveryport ( #PCDATA ) >
<!ELEMENT secondaryrecoveryip ( #PCDATA ) >
<!ELEMENT secondaryrecoveryport ( #PCDATA ) >
<!ELEMENT secondaryip ( #PCDATA ) >
<!ELEMENT secondaryport ( #PCDATA ) >
<!ELEMENT application-system-name ( #PCDATA ) >
<!ELEMENT application-system-vendor ( #PCDATA ) >
<!ELEMENT application-system-version ( #PCDATA ) >
<!ELEMENT ask-for-ref ( #PCDATA ) >
<!ELEMENT auto-connect ( #PCDATA) >
<!ELEMENT auto-increment ( #PCDATA ) >
<!ELEMENT auto-reconnect ( #PCDATA ) >
<!ELEMENT capacity ( #PCDATA ) >
<!ELEMENT cancel-on-disconnect ( #PCDATA ) >
<!ELEMENT backup-channel ( #PCDATA ) >
<!ELEMENT clientorderid-prefix ( #PCDATA ) >
<!ELEMENT clientinfo-is-account ( #PCDATA ) >
<!ELEMENT client-category ( #PCDATA ) >
<!ELEMENT disable-audit-log ( #PCDATA ) >
<!ELEMENT deliver-to-comp-id ( #PCDATA ) >
<!ELEMENT display ( #PCDATA ) >
<!ELEMENT eurex-ip-addr ( #PCDATA ) >
<!ELEMENT fixtrc-file ( #PCDATA ) >
<!ELEMENT generate-missing-insert-acks ( #PCDATA ) >
<!ELEMENT pqttrc-file ( #PCDATA ) >
<!ELEMENT forward-session-rejects ( #PCDATA ) >
<!ELEMENT groupid ( #PCDATA ) >
<!ELEMENT gtc-file ( #PCDATA ) >
<!ELEMENT intermarket-sweep-eligibility ( #PCDATA ) >
<!ELEMENT increment ( #PCDATA ) >
<!ELEMENT logonid ( #PCDATA ) >
<!ELEMENT seqnumber ( #PCDATA ) >
<!ELEMENT sessionsubid ( #PCDATA ) >
<!ELEMENT minimum-quantity ( #PCDATA ) >
<!ELEMENT self-trade-prevention ( #PCDATA ) >
<!ELEMENT sender-sub-id ( #PCDATA ) >
<!ELEMENT sender-comp-id ( #PCDATA ) >
<!ELEMENT target-sub-id ( #PCDATA ) >
<!ELEMENT target-comp-id ( #PCDATA ) >
<!ELEMENT linked-channel-id ( #PCDATA ) >
<!ELEMENT sender-location-id ( #PCDATA ) >
<!ELEMENT heartbeat-interval ( #PCDATA ) >
<!ELEMENT orderint32 ( #PCDATA ) >
<!ELEMENT customer-or-firm ( #PCDATA ) >
<!ELEMENT cti-code ( #PCDATA ) >
<!ELEMENT fee-billing ( #PCDATA ) >
<!ELEMENT in-flight-mitigation ( #PCDATA ) >
<!ELEMENT clearing-instruction (#PCDATA) >
<!ELEMENT clearing-firm (#PCDATA) >
<!ELEMENT clearing-account (#PCDATA) >
<!ELEMENT order-capacity (#PCDATA) >
<!ELEMENT orderdb-size (#PCDATA) >
<!ELEMENT init-order-id (#PCDATA) >
<!ELEMENT keyid ( #PCDATA ) >
<!ELEMENT deskey ( #PCDATA ) >
<!ELEMENT discard-order-restated ( #PCDATA ) >
<!ELEMENT exit-on-connection-errors ( #PCDATA ) >
<!ELEMENT max-products ( #PCDATA ) >
<!ELEMENT onbehalfof-comp-id ( #PCDATA ) >
<!ELEMENT onbehalfof-sub-id ( #PCDATA ) >
<!ELEMENT onbehalfof-location-id ( #PCDATA ) >
<!ELEMENT operatingenvironment ( #PCDATA ) >
<!ELEMENT match ( match-info )+ >
<!ELEMENT reconnect-tries ( #PCDATA ) >
<!ELEMENT reconnect-timeout-s ( #PCDATA ) >
<!ELEMENT risk-id ( #PCDATA ) >
<!ELEMENT system-time-timestamps ( #PCDATA ) >
<!ELEMENT trade-input-source ( #PCDATA ) >
<!ELEMENT thread-name-suffix ( #PCDATA ) >
<!ELEMENT checkalive-timeout-s ( #PCDATA ) >
<!ELEMENT member-id ( #PCDATA ) >
<!ELEMENT member-sub-group ( #PCDATA ) >
<!ELEMENT user-appl-id ( #PCDATA ) >
<!ELEMENT trader-name ( #PCDATA ) >
<!ELEMENT trader-password ( #PCDATA ) >
<!ELEMENT session-logical-id ( #PCDATA ) >
<!ELEMENT request-enrichment-rules ( #PCDATA ) >
<!ELEMENT reset-sequence ( #PCDATA ) >
<!ELEMENT risk-enabled ( #PCDATA ) >
<!ELEMENT risk-type-override ( #PCDATA ) >
<!ELEMENT risk-maxqty-order ( #PCDATA) >
<!ELEMENT risk-max-tradedqty ( #PCDATA) >
<!ELEMENT security-id ( #PCDATA) >
<!ELEMENT security-type ( #PCDATA) >
<!ELEMENT use-v3-neworder ( #PCDATA) >
<!ELEMENT socket-path ( #PCDATA) >
<!ELEMENT user ( #PCDATA) >
<!ELEMENT firm ( #PCDATA) >
<!ELEMENT algo-indicator ( #PCDATA) >
<!ELEMENT segment-list ( #PCDATA ) >
<!ELEMENT currency-list ( #PCDATA ) >
<!ELEMENT password ( #PCDATA ) >
<!ELEMENT new-password ( #PCDATA ) >
<!ELEMENT newpassword ( #PCDATA ) >
<!ELEMENT username ( #PCDATA ) >
<!ELEMENT recovery-affinity ( #PCDATA ) >
<!ELEMENT recovery-logfile ( #PCDATA ) >
<!ELEMENT register-signal-handler ( #PCDATA ) >
<!ELEMENT start-seq ( #PCDATA ) >
<!ELEMENT instrument-index-type ( #PCDATA ) >
<!ELEMENT market-mode ( #PCDATA ) >
<!ELEMENT subscription ( #PCDATA ) >
<!ELEMENT symbol ( #PCDATA ) >
<!ELEMENT symbol-table-size ( #PCDATA ) >
<!ELEMENT timeinforce ( #PCDATA ) >
<!ELEMENT trader-id ( #PCDATA ) >
<!ELEMENT ucas ( #PCDATA ) >
<!ELEMENT version ( #PCDATA ) >
<!ELEMENT trading-status-monitoring ( #PCDATA ) >
<!ELEMENT ignore-trade-messages ( #PCDATA ) >
<!ELEMENT enable-order-executed-trades ( #PCDATA ) >
<!ELEMENT use-symbols ( #PCDATA ) >
<!ELEMENT generate-referential ( #PCDATA ) >
<!ELEMENT simulated-dropping-chance ( #PCDATA ) >
<!ELEMENT simulated-dropping-gap-range ( #PCDATA ) >
<!ELEMENT simulated-dropping-pass-alternate ( #PCDATA ) >
<!ELEMENT simulated-dropping-on-signal ( #PCDATA ) >
<!ELEMENT simulated-dropping-logfile ( #PCDATA ) >
<!ELEMENT dumping-threads-affinity ( #PCDATA ) >
<!ELEMENT dumping-threads-buffer-size ( #PCDATA ) >
<!ELEMENT dumping-folder ( #PCDATA ) >
<!ELEMENT direct-electronic-access ( #PCDATA ) >
<!ELEMENT liquidity-provision ( #PCDATA ) >
<!ELEMENT commodity-indicator ( #PCDATA ) >
<!ELEMENT investment-decision ( #PCDATA ) >
<!ELEMENT execution-decision ( #PCDATA ) >
<!ELEMENT client-id ( #PCDATA ) >
<!ELEMENT mifid-id ( #PCDATA ) >
<!-- End Of GMAC -->
<!-- BOOK -->
<!ELEMENT max-queues ( #PCDATA ) >
<!ELEMENT cpus ( #PCDATA ) >
<!ELEMENT updates-bufferpool ( #PCDATA ) >
<!ELEMENT filtering ( #PCDATA ) >
<!ELEMENT da-instrument ( #PCDATA ) >
<!ELEMENT da-local-instrument ( #PCDATA ) >
<!ELEMENT da-segment ( #PCDATA ) >
<!ELEMENT da-sector ( #PCDATA ) >
<!ELEMENT sched-fifo-priority ( #PCDATA ) >
<!ELEMENT ob-debug-check-refresh ( #PCDATA ) >
<!ELEMENT ob-debug-log-level ( #PCDATA ) >
<!ELEMENT refresh-cycles-max ( #PCDATA ) >
<!ELEMENT refresh-on-maximum-gap ( #PCDATA ) >
<!ELEMENT datareferential ( verbosity | filtering | da-instrument | da-local-instrument | da-segment | da-sector )* >
<!ELEMENT deepbook ( market-status-correction | uncrossing-mechanism | uncrossing-log-enabled | check-trade-instrument | da-book-head | da-price-level | da-order-prv )* >
<!ELEMENT order-buffer-size ( #PCDATA ) >
<!ELEMENT uncross-user-log-enabled ( #PCDATA ) >
<!ELEMENT uncrossing-mechanism ( #PCDATA ) >
<!ELEMENT uncrossing-log-enabled ( #PCDATA ) >
<!ELEMENT market-status-correction ( #PCDATA ) >
<!ELEMENT da-book-head ( #PCDATA ) >
<!ELEMENT da-price-level ( #PCDATA ) >
<!ELEMENT da-order-prv ( #PCDATA ) >
<!ELEMENT check-trade-instrument ( #PCDATA ) >
<!-- End Of BOOK -->
<!-- GXA -->
<!ELEMENT admin-cpu ( #PCDATA ) >
<!ELEMENT audit-file ( #PCDATA ) >
<!ELEMENT bypass-board ( #PCDATA ) >
<!ELEMENT cov-pool ( #PCDATA ) >
<!ELEMENT cpu ( #PCDATA ) >
<!ELEMENT disconnect-timeout-s ( #PCDATA ) >
<!ELEMENT input-bufferpool ( #PCDATA ) >
<!ELEMENT iov-pool ( #PCDATA ) >
<!ELEMENT log-alt-file ( #PCDATA ) >
<!ELEMENT log-level ( #PCDATA ) >
<!ELEMENT log-name ( #PCDATA ) >
<!ELEMENT log-shm-key ( #PCDATA ) >
<!ELEMENT log-size ( #PCDATA ) >
<!ELEMENT logging-append ( #PCDATA ) >
<!ELEMENT logging-affinity ( #PCDATA ) >
<!ELEMENT max-flush-time ( #PCDATA ) >
<!ELEMENT redis-logging ( #PCDATA ) >
<!ELEMENT redis-ip ( #PCDATA ) >
<!ELEMENT redis-port ( #PCDATA ) >
<!ELEMENT max-log-buffer-size ( #PCDATA ) >
<!ELEMENT logging-file ( #PCDATA ) >
<!ELEMENT max-orders ( #PCDATA ) >
<!ELEMENT order-table-size ( #PCDATA ) >
<!ELEMENT nb-worker ( #PCDATA )>
<!ELEMENT orderid-type ( #PCDATA ) >
<!ELEMENT output-bufferpool ( #PCDATA ) >
<!ELEMENT pub-period ( #PCDATA ) >
<!ELEMENT record-playback ( #PCDATA ) >
<!ELEMENT playback-file ( #PCDATA ) >
<!ELEMENT recovery-enabled ( #PCDATA ) >
<!ELEMENT recovery-file ( #PCDATA ) >
<!ELEMENT checkpoint-file ( #PCDATA ) >
<!ELEMENT tcp-recovery-enabled ( #PCDATA ) >
<!ELEMENT timeout-checkpoint ( #PCDATA ) >
<!ELEMENT timeout-expire ( #PCDATA ) >
<!ELEMENT shm-stat-key ( #PCDATA ) >
<!ELEMENT socket-throughput ( #PCDATA ) >
<!ELEMENT socket-timeout ( #PCDATA ) >
<!ELEMENT udp-cnx-port ( #PCDATA ) >
<!ELEMENT thread-pool-size ( #PCDATA ) >
<!ELEMENT tunnel-ip ( #PCDATA ) >
<!ELEMENT rules-file ( #PCDATA ) >
<!ELEMENT scale-factor ( #PCDATA ) >
<!ELEMENT sessions-per-thread ( #PCDATA ) >
<!ELEMENT worker-start-port ( #PCDATA )>
<!ELEMENT zmq-pub-string ( #PCDATA ) >
<!ELEMENT zmq-router-string ( #PCDATA ) >
<!ELEMENT large-difference-check ( #PCDATA ) >
<!ELEMENT price-check ( #PCDATA ) >
<!ELEMENT wide-spread-check ( #PCDATA ) >
<!-- End Of GXA -->
<!-- Streamer -->
<!ELEMENT streamer ( debuginput| tcpdumpinput| tcpdumpinputold| feedinput| itchinput| debugoutput| feedoutput| input| limit | output | output2 | nysedumpinput | file | slowoutput )* >
<!ELEMENT input ( #PCDATA | input | type | filterport | filename | buffersize | messagesperpacket | droprate | group | perpacket| files | skipheader | verbosity | groups | loop | width | max | first | last)* >
<!ELEMENT output ( #PCDATA | output | type | packetspersecond | limit | localaddress | remoteaddress | raw | outputs | droprate | verbosity | bytesfromstart | bytesfromend | delay )* >
<!ELEMENT output2 ( limit | type | bytesfromstart | bytesfromend )* >
<!ELEMENT nysedumpinput ( type| input )* >
<!ELEMENT files ( fname+ ) >
<!ELEMENT fname ( #PCDATA ) >
<!ELEMENT groups ( #PCDATA ) >
<!ELEMENT loop ( #PCDATA ) >
<!ELEMENT width ( #PCDATA ) >
<!ELEMENT slowoutput ( type| packetspersecond| output )* >
<!ELEMENT skipheader ( #PCDATA ) >
<!ELEMENT debuginput ( type| max )* >
<!ELEMENT tcpdumpinput ( type| input )* >
<!ELEMENT tcpdumpinputold ( type| input )* >
<!ELEMENT feedinput ( type| input )* >
<!ELEMENT feedoutput ( type| localaddress| remoteaddress )* >
<!ELEMENT itchinput ( type| input )* >
<!ELEMENT debugoutput ( type| bytesfromstart| bytesfromend )* >
<!ELEMENT first ( #PCDATA ) >
<!ELEMENT last ( #PCDATA ) >
<!ELEMENT outputs ( pa1| pb1| pa2| pb2| pa3| pb3| p04| p16| p17 | t1 | t2 | t3 | t4 | t5)* >
<!ELEMENT max ( #PCDATA ) >
<!ELEMENT perpacket ( #PCDATA ) >
<!ELEMENT group ( #PCDATA ) >
<!ELEMENT droprate ( #PCDATA ) >
<!ELEMENT raw ( #PCDATA ) >
<!ELEMENT messagesperpacket ( #PCDATA ) >
<!ELEMENT bytesfromend ( #PCDATA ) >
<!ELEMENT bytesfromstart ( #PCDATA ) >
<!ELEMENT delay ( #PCDATA ) >
<!ELEMENT type ( #PCDATA ) >
<!ELEMENT filterport ( #PCDATA ) >
<!ELEMENT filename ( #PCDATA ) >
<!ELEMENT buffersize ( #PCDATA ) >
<!ELEMENT packetspersecond ( #PCDATA ) >
<!ELEMENT limit ( #PCDATA ) >
<!ELEMENT localaddress ( interface )* >
<!ELEMENT remoteaddress ( ip | port )* >
<!ELEMENT port ( #PCDATA ) >
<!ELEMENT interface ( #PCDATA ) >
<!ELEMENT p04 ( type| localaddress| remoteaddress )* >
<!ELEMENT p16 ( type| localaddress| remoteaddress )* >
<!ELEMENT p17 ( type| localaddress| remoteaddress )* >
<!ELEMENT pa1 ( type| localaddress| remoteaddress )* >
<!ELEMENT pa2 ( type| localaddress| remoteaddress )* >
<!ELEMENT pa3 ( type| localaddress| remoteaddress )* >
<!ELEMENT pb1 ( type| localaddress| remoteaddress )* >
<!ELEMENT pb2 ( type| localaddress| remoteaddress )* >
<!ELEMENT pb3 ( type| localaddress| remoteaddress )* >
<!ELEMENT t1 ( type | raw | localaddress | remoteaddress )* >
<!ELEMENT t2 ( type | raw | localaddress | remoteaddress )* >
<!ELEMENT t3 ( type | raw | localaddress | remoteaddress )* >
<!ELEMENT t4 ( type | raw | localaddress | remoteaddress )* >
<!ELEMENT t5 ( type | raw | localaddress | remoteaddress )* >
<!-- End Of Streamer -->
<!-- Instruments -->
<!ELEMENT instruments ( marcaxa | moprclx | instrument)* >
<!ELEMENT moprclx ( #PCDATA ) >
<!ELEMENT marcaxa ( #PCDATA ) >
<!ELEMENT instrument ( #PCDATA ) >
<!-- End Of Instruments -->
<!-- TEST -->
<!ELEMENT test ( #PCDATA | logfile | symbol | price | buy-price | sell-price | timeinforce | size | live-testing | increment | throughput | actions | price-nominator | support-self-trade | price-decimals | segment-id )* >
<!ELEMENT price-decimals (#PCDATA) >
<!ELEMENT buy-price (#PCDATA) >
<!ELEMENT sell-price (#PCDATA) >
<!ELEMENT throughput ( #PCDATA ) >
<!ELEMENT actions ( action+ )* >
<!ELEMENT action ( #PCDATA ) >
<!ELEMENT support-self-trade (#PCDATA) >
<!ELEMENT segment-id (#PCDATA) >
<!-- End Of TEST -->
<!-- DataFiles -->
<!ELEMENT datafiles ( ise| opra| cme| itch| bats | nyse )* >
<!ELEMENT bats ( #PCDATA ) >
<!ELEMENT cme ( #PCDATA ) >
<!ELEMENT ise ( #PCDATA ) >
<!ELEMENT opra ( #PCDATA ) >
<!ELEMENT itch ( #PCDATA ) >
<!ELEMENT nyse ( #PCDATA ) >
<!-- End Of DataFiles -->
<!-- AMDD-ICE -->
<!ELEMENT amdd-ice ( tcp-server )? >
<!ELEMENT tcp-server ( address| port| username| password| debugpacket | packetfile)* >
<!ELEMENT address ( #PCDATA ) >
<!ELEMENT debugpacket ( #PCDATA ) >
<!ELEMENT packetfile ( type | filename )* >
<!-- End Of AMDD-ICE -->
<!-- TIMEDIFF -->
<!ELEMENT timediff ( quick-mode| histogram-bins| histogram-min| histogram-max )* >
<!ELEMENT quick-mode EMPTY >
<!ELEMENT histogram-bins ( #PCDATA ) >
<!ELEMENT histogram-max ( #PCDATA ) >
<!ELEMENT histogram-min ( #PCDATA ) >
<!-- End Of TIMEDIFF-->
<!-- AMDD-ITCH -->
<!ELEMENT amdd-itch ( bitfile | wfa-map | wfa-debug | arbitrage)* >
<!ELEMENT wfa-map ( link )* >
<!ELEMENT wfa-debug EMPTY >
<!-- End Of AMDD-ITCH -->
<!-- AMDD-CME & AMDD-CME2-->
<!ELEMENT amdd-cme2 ( arbitrage )? >
<!ELEMENT amdd-cme ( arbitrage )? >
<!ELEMENT arbitrage ( #PCDATA | passthru | crossmode | extended)* >
<!ELEMENT passthru ( #PCDATA ) >
<!ELEMENT crossmode ( #PCDATA ) >
<!ELEMENT extended ( #PCDATA ) >
<!-- End Of AMDD-CME -->
<!-- AMDD-ISE -->
<!ELEMENT amdd-ise ( bitfile| multicast-groups-a| subscriber )* >
<!ELEMENT multicast-groups-a ( group-info )* >
<!-- End Of AMDD-ISE -->
<!-- AMDD-CMED -->
<!ELEMENT amdd-cmed ( arbitrage )? >
<!-- End Of AMDD-CMED -->
<!-- AMDD-OPRA -->
<!ELEMENT amdd-opra ( bitfile| mcastgroups| subscriber )* >
<!ELEMENT mcastgroups ( group-info* ) >
<!ELEMENT subscriber ( ip| igmp-period| igmp-gap )* >
<!ELEMENT igmp-gap ( #PCDATA ) >
<!ELEMENT igmp-period ( #PCDATA ) >
<!-- End Of AMDD-OPRA -->
<!-- STREAMER-OPRA -->
<!ELEMENT streamer-opra ( ip-dst| udp-port-dst| interface| file-to-send )* >
<!ELEMENT file-to-send ( #PCDATA ) >
<!ELEMENT ip-dst ( #PCDATA ) >
<!ELEMENT udp-port-dst ( #PCDATA ) >
<!-- End Of STREAMER-OPRA -->
<!-- STREAMER-ISE -->
<!ELEMENT streamer-ise ( ip-dst| udp-port-dst| interface| file-to-send| maximum-packets )* >
<!ELEMENT maximum-packets ( #PCDATA ) >
<!-- End Of STREAMER-ISE -->
<!-- air -->
<!ELEMENT air-config-file (#PCDATA) >
<!ELEMENT max-instruments ( #PCDATA ) >
<!ELEMENT max-limit-databases ( #PCDATA ) >
<!ELEMENT max-nb-markets ( #PCDATA ) >
<!ELEMENT shkey-file ( #PCDATA ) >
<!ELEMENT limit-granularity ( #PCDATA ) >
<!ELEMENT shqsize ( #PCDATA ) >
<!ELEMENT shm-dir ( #PCDATA ) >
<!ELEMENT driver-cpu ( #PCDATA ) >
<!ELEMENT air-config ( #PCDATA ) >
<!ELEMENT air-vlan ( #PCDATA ) >
<!ELEMENT air-gateway ( #PCDATA ) >
<!ELEMENT max-pending ( #PCDATA ) >
<!ELEMENT heartbeat-time ( #PCDATA ) >
<!ELEMENT standalone ( #PCDATA ) >
<!ELEMENT plugin ( #PCDATA ) >
<!ELEMENT driver-logfile ( #PCDATA ) >
<!ELEMENT logging-mode ( #PCDATA ) >
<!ELEMENT arca-fill-format ( #PCDATA ) >
<!ELEMENT session-config-path ( #PCDATA ) >
<!ELEMENT logon-timeout ( #PCDATA ) >
<!ELEMENT heartbeat-send-interval ( #PCDATA ) >
<!ELEMENT heartbeat-receive-timeout ( #PCDATA ) >
<!ELEMENT limit-provider ( logfile | port | host | credentials | backoff-period | heartbeat-send-interval | heartbeat-receive-timeout | interface )* >
<!ELEMENT group-info ( #PCDATA | limit-provider )* >
<!ELEMENT limit-provider-groups (group-info+) >
<!ELEMENT air-server ( verbosity | logfile | cpu | max-pending | heartbeat-time | limit-provider-groups | plugin )* >
<!-- end of air -->
<!-- begin of gxa-lite -->
<!ELEMENT gxa-lite (libraries) >
<!ELEMENT libraries (paths, library*) >
<!ELEMENT paths (path)* >
<!ELEMENT path (#PCDATA) >
<!ELEMENT library (name, entry, file) >
<!ELEMENT name (#PCDATA) >
<!ELEMENT entry (#PCDATA) >
<!ELEMENT file (#PCDATA) >
<!-- end of gxa-lite -->
@@ -0,0 +1,64 @@
<!DOCTYPE config SYSTEM "${CELOXICA_DTD_PATH:=./}/config.dtd">
<!--DOCTYPE config SYSTEM "${CELOXICA_DTD_PATH:=/opt/celoxica/share/etc}/config.dtd"-->
<config>
<gmac>
<!-- verbosity -->
<verbosity> INFO </verbosity>
<logfile> /tmp/gmac.log</logfile>
<!-- reorder/recovery buffer pool -->
<bufferpool> 1048576 4 </bufferpool>
<!-- recovery settings -->
<recovery> off </recovery>
<!-- specifies, if GMAC should send subscription IGMP packets. -->
<subscription> on </subscription>
<max-hw-waiting-packets> 50000 </max-hw-waiting-packets>
<markets>
<!-- market ID = Market name -->
<market> 0 CME_BINARY
<v3> on </v3>
<time-zone> -6 </time-zone>
<!-- Activate extensions -->
<extension-messages>1</extension-messages>
<!-- Reorder settings: max number of packets in reorder buffer per channel + timeout -->
<!-- Note that reordering is disabled by default on this plugin. Uncomment below to enable -->
<!--max-channel-buffer> 16 </max-channel-buffer-->
<!--max-buffer-timeout-ns> 30000 </max-buffer-timeout-ns-->
<!-- Refer to ftp://ftp.cmegroup.com/SBEFix/Production/Configuration/config.xml for market data configuration details -->
<!-- The "local channelIDs" are set to the cme "channel id" for convenience -->
<!-- Instrument replay channels, queue 0 -->
<referentials>
<channel> 310 0 clxng_shared clx0 224.0.31.43:14310 - - - on </channel> <!-- 310NA instrument replay -->
<channel> 311 0 clxng_shared clx0 224.0.31.44:14311 - - - on </channel> <!-- 311NA instrument replay -->
</referentials>
<!-- Incremental channels, queue 1 -->
<channels>
<channel> 310 1 clxng_shared clx0 224.0.31.1:14310 - - - on </channel> <!-- 310IA incremental -->
<!--channel> 310B 1 clxng_shared clx1 224.0.32.1:15310 - - - on </channel--> <!-- 310IB incremental -->
<channel> 311 1 clxng_shared clx0 224.0.31.2:14311 - - - on </channel> <!-- 311IA incremental -->
<!--channel> 311B 1 clxng_shared clx1 224.0.32.2:15311 - - - on </channel--> <!-- 311IB incremental -->
</channels>
<!-- Snapshot channels -->
<snapshot-enabled> yes </snapshot-enabled>
<snapshots>
<channel> 310 0 clxng_shared clx0 224.0.31.22:14310 - - - off </channel> <!-- 310SA incremental -->
<channel> 311 0 clxng_shared clx0 224.0.31.23:14311 - - - off </channel> <!-- 311SA incremental -->
</snapshots>
</market>
</markets>
</gmac>
</config>
@@ -0,0 +1,63 @@
<!DOCTYPE config SYSTEM "${CELOXICA_DTD_PATH:=/opt/celoxica/share/etc}/config.dtd">
<config>
<gmac>
<!-- verbosity -->
<verbosity> INFO </verbosity>
<logfile> /tmp/gmac.log</logfile>
<!-- reorder/recovery buffer pool -->
<bufferpool> 1048576 4 </bufferpool>
<!-- recovery settings -->
<recovery> off </recovery>
<!-- specifies, if GMAC should send subscription IGMP packets. -->
<subscription> on </subscription>
<max-hw-waiting-packets> 131071 </max-hw-waiting-packets>
<markets>
<!-- market ID = Market name -->
<market> 0 CME_BINARY
<v3> on </v3>
<time-zone> -6 </time-zone>
<!-- Activate extensions -->
<extension-messages>1</extension-messages>
<!-- Reorder settings: max number of packets in reorder buffer per channel + timeout -->
<!-- Note that reordering is disabled by default on this plugin. Uncomment below to enable -->
<!--max-channel-buffer> 16 </max-channel-buffer-->
<!--max-buffer-timeout-ns> 30000 </max-buffer-timeout-ns-->
<!-- Refer to ftp://ftp.cmegroup.com/SBEFix/Production/Configuration/config.xml for market data configuration details -->
<!-- The "local channelIDs" are set to the cme "channel id" for convenience -->
<!-- Instrument replay channels -->
<referentials>
<channel> 310 0 clxng clx0 224.0.31.43:14310 - - - on </channel> <!-- 310NA instrument replay -->
<channel> 311 0 clxng clx0 224.0.31.44:14311 - - - on </channel> <!-- 311NA instrument replay -->
</referentials>
<!-- Incremental channels -->
<channels>
<channel> 310A 0 clxng clx0 224.0.31.1:14310 - - - on </channel> <!-- 310IA incremental -->
<channel> 310B 0 clxng clx1 224.0.32.1:15310 - - - on </channel> <!-- 310IB incremental -->
<channel> 311A 0 clxng clx0 224.0.31.2:14311 - - - on </channel> <!-- 311IA incremental -->
<channel> 311B 0 clxng clx1 224.0.32.2:15311 - - - on </channel> <!-- 311IB incremental -->
</channels>
<!-- Snapshot channels -->
<snapshot-enabled> yes </snapshot-enabled>
<snapshots>
<channel> 310 0 clxng clx0 224.0.31.22:14310 - - - off </channel> <!-- 310SA incremental -->
<channel> 311 0 clxng clx0 224.0.31.23:14311 - - - off </channel> <!-- 311SA incremental -->
</snapshots>
</market>
</markets>
</gmac>
</config>
+25 -18
View File
@@ -1,22 +1,29 @@
cmake_minimum_required(VERSION 3.5)
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libbase.so")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libutils.so")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libfix_lib.so")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libclxlog.so")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libade_version.so")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libade.so")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libclx.so")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libgmac_version.so")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libgmac.so")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libcputimestamp.so")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libclxconfig.so")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libconfigfile.so")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libac.so")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/librc.so")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/liblldt.so")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libregister.so")
file(COPY ${CELOXICA_LIB} DESTINATION ${CMAKE_BINARY_DIR}/src/server/sparkd)
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libbase.so.5")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libutils.so.5")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libfix_lib.so.5")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libclxlog.so.5")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libade_version.so.5")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libade.so.5")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libclx.so.5")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libgmac_version.so.3")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libgmac.so.3")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libcputimestamp.so.5")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libclxconfig.so.1")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libconfigfile.so.5")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libac.so.5")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/librc.so.5")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/liblldt.so.5")
LIST(APPEND CELOXICA_LIB "${SPARK_LIB}/celoxica/libregister.so.5")
FOREACH(f ${CELOXICA_LIB})
get_filename_component(ff ${f} NAME)
configure_file(${f} ${CMAKE_BINARY_DIR}/src/server/sparkd/${ff} COPYONLY)
ENDFOREACH()
configure_file(md/platforms/celoxica/gmac.cfg ${CMAKE_BINARY_DIR}/src/server/sparkd/gmac.cfg COPYONLY)
configure_file(md/platforms/celoxica/config.dtd ${CMAKE_BINARY_DIR}/src/server/sparkd/config.dtd COPYONLY)
#to support shared objects
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--disable-new-dtags -Wl,-rpath,'.:$ORIGIN:$$ORIGIN' -Wl,-z,origin")