%% -*- 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 }]} ] } ] } ] } ]} ]} ].