This repository has been archived by the owner on Nov 2, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 35
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
245 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,245 @@ | ||
%% -*- erlang -*- | ||
|
||
%% Copyright (C) 2014, Jaguar Land Rover | ||
%% | ||
%% This program is licensed under the terms and conditions of the | ||
%% Mozilla Public License, version 2.0. The full text of the | ||
%% Mozilla Public License is at https://www.mozilla.org/MPL/2.0/ | ||
%% | ||
%% Configuration file for the (in-vehicle) IVI used by the hvac_demo | ||
%% | ||
%% See ../hvac_demo/README.md for details on the demo. | ||
%% | ||
%% See ../CONFIGURE.md for a details on the configuration process | ||
%% itself. | ||
%% | ||
[ | ||
%% All erlang apps needed to fire up a node. Do not touch. | ||
{apps, | ||
[kernel, | ||
stdlib, | ||
sasl, | ||
{setup, load}, | ||
syntax_tools, | ||
lager, | ||
crypto, | ||
public_key, | ||
exo, | ||
compiler, | ||
ssl, | ||
asn1, | ||
%% RVI-specific apps. | ||
|
||
%% Do not touch unless you are replacing apps with your own | ||
%% version. If you are replacing an app with a non-Erlang version, | ||
%% it still has to be loaded in order to resolve. | ||
%% If, for example, you want to deploy your own scheduler | ||
%% outside Erlang, replace | ||
%% | ||
%% schedule, | ||
%% with | ||
%% { schedule, load }, | ||
%% | ||
rvi, | ||
rvi_common, | ||
service_discovery, | ||
service_edge, | ||
authorize, | ||
schedule, | ||
dlink_tcp, | ||
bt, | ||
dlink_bt, | ||
proto_bert, | ||
proto_json ]}, | ||
|
||
%% | ||
%% Custom environment settings | ||
%% for all apps running on the node. | ||
%% | ||
{env, | ||
[ | ||
%% Lager is the main logging mechanism. | ||
%% See https://github.com/basho/lager for details. | ||
%% | ||
{lager, | ||
[ { handlers, | ||
%% Change this to debug, info, notice, warning, or error in | ||
%% order to lower the console chatter. | ||
[ {lager_console_backend, debug} ] | ||
} | ||
] | ||
}, | ||
|
||
%% All RVI configuration is done here. | ||
%% Please note that the rvi_node.sh launch script | ||
%% can still override the port range and static nodes | ||
%% through its command line parameters. | ||
%% | ||
{rvi, | ||
[ | ||
|
||
%% Specify the node address that data_link uses to listen to | ||
%% incoming traffic from other rvi nodes. | ||
%% | ||
%% This is the address that is announced to | ||
%% other rvi nodes during service discovery and should be | ||
%% forwarded through firewalls and port forwarding to to the port | ||
%% specified by the configuration entry rvi -> components -> | ||
%% data_link -> bert_rpc_server (see below). | ||
%% | ||
%% If this node is sitting behind a firewall and cannot | ||
%% receive incomign connections on any address, its | ||
%% node_address should be set to "0.0.0.0:0" to inform | ||
%% the remote node that it should not attempt to | ||
%% connect back to self. | ||
{ node_address, "127.0.0.1:8807" }, | ||
|
||
%% Specify the prefix of all services that this rvi node is hosting. | ||
%% | ||
%% All local services regsitering with service edge will be prefixed with | ||
%% the string below when they are announced to remote rvi nodes | ||
%% that connect to this node (using the address specified | ||
%% by node_address above). | ||
%% | ||
%% If a locally connected service registers itself as | ||
%% "hvac/fan_speed", and the node_service_prefix is | ||
%% "jlr.com/vin/1234/", this node will announce the service | ||
%% "jlr.com/vin/1234/hvac/fan_speed" as being available | ||
%% to remotely connected rvi nodes. | ||
%% | ||
%% Two rvi nodes should never have the same node_service_prefix | ||
%% value unless all services add a system-wide unique name | ||
%% to it. | ||
%% | ||
{ node_service_prefix, "jlr.com/bt/stoffe"}, | ||
|
||
|
||
{ routing_rules, | ||
[ | ||
%% Make sure to have a default if you don't want your message | ||
%% to error out immediately. With a default the message will | ||
%% be queued until it times out, waiting for a remote node | ||
%% to connect and announce that it can handle the targeted service. | ||
{ "", | ||
[ | ||
{ proto_json_rpc, dlink_tcp_rpc} | ||
] | ||
} | ||
] | ||
}, | ||
{ components, | ||
[ | ||
%% A note about JSON-RPC calls vs gen_server calls: | ||
%% | ||
%% All locally connected services communicate with Service Edge | ||
%% through JSON-RPC, as specified below. | ||
%% | ||
%% Communication between the RVi components, however, can be | ||
%% either JSON-RPC or gen_server calls. | ||
%% | ||
%% JSON-RPC calls provide compatability with replacement components | ||
%% written in languages other than Erlang. | ||
%% | ||
%% Gen_server calls provide native erlang inter-process calls that | ||
%% are about 4x faster than JSON-RPC when transmitting large data volumes. | ||
%% | ||
%% If one or more of the components below are replaced with external | ||
%% components, use JSON-RPC by specifying url and exo_http_opts | ||
%% for all components. | ||
%% | ||
%% If you are running an all-native erlang system, use gen_server calls | ||
%% by configuring gen_server. | ||
%% | ||
%% If you specify both gen_server and url/exo_http_opts, the gen_server | ||
%% communicaiton path will be used for inter component communication. | ||
%% | ||
%% Please note that communication between two RVI nodes are | ||
%% not affected by this since data_link_bert_rpc will use | ||
%% BERT-RPC to communicate ( using the address/port specified | ||
%% by bert_rpc_server). | ||
%% | ||
|
||
{service_edge, | ||
[ | ||
%% Service_edge_rpc component is used as a gen_server | ||
{ service_edge_rpc, gen_server, | ||
[ | ||
%% JSON-RPC address will be translated to | ||
%% an URL looking like this: | ||
%% http://127.0.0.1:8801 | ||
%% | ||
%% This URL is used both for communication with | ||
%% locally connected services and for intra-component | ||
%% communication in case the access method for | ||
%% service_edge_rpc is specified as json_rpc. | ||
{ json_rpc_address, { "127.0.0.1", 8801 } }, | ||
|
||
%% Websocket is used for websocket access, preferably | ||
%% through the rvi.js package available for Javascript | ||
%% apps in browsers and crosswalk who wants to interface | ||
%% RVI. | ||
{ websocket, [ { port, 8808}]} | ||
] | ||
} | ||
] | ||
}, | ||
{ service_discovery, | ||
[ { service_discovery_rpc, gen_server, | ||
[ | ||
{ json_rpc_address, { "127.0.0.1", 8802 }} | ||
] | ||
} | ||
] | ||
}, | ||
{ schedule, | ||
[ { schedule_rpc, json_rpc, | ||
[ | ||
{ json_rpc_address, { "127.0.0.1", 8803 }} | ||
] | ||
} | ||
] | ||
}, | ||
{ authorize, | ||
[ { authorize_rpc, gen_server, | ||
[ | ||
{ json_rpc_address, { "127.0.0.1", 8804 } } | ||
] | ||
} | ||
] | ||
}, | ||
{ protocol, | ||
[ { proto_json_rpc, gen_server, | ||
[ | ||
{ json_rpc_address, { "127.0.0.1", 8805 } } | ||
] | ||
} | ||
] | ||
}, | ||
{ data_link, | ||
[ | ||
{ dlink_tcp_rpc, gen_server, | ||
[ | ||
{ json_rpc_address, { "127.0.0.1", 8806 } }, | ||
%% Bert_rpc server specifies the port we should | ||
%% listen to for incoming connections | ||
%% from other rvi nodes. | ||
%% A specific NIC address can also be specified | ||
%% through the {ip, "192.168.0.1" } tuple. | ||
{ server_opts, [ { port, 8807 }]} | ||
%% { persistent_connections, [ "38.129.64.13:8807" ]} | ||
] | ||
}, | ||
{ dlink_bt_rpc, gen_server, | ||
[ | ||
|
||
{ server_opts, [ { channel, 1 }]} | ||
] | ||
} | ||
|
||
] | ||
} | ||
] | ||
} | ||
]} | ||
]} | ||
]. |