blob: 261043cc4f40897fa642c5da722463f4bbb7dcb0 [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Traffic Router &mdash; Traffic Control 2.2-dev documentation </title>
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/theme_overrides.css" type="text/css" />
<link rel="index" title="Index"
href="../genindex.html"/>
<link rel="search" title="Search" href="../search.html"/>
<link rel="top" title="Traffic Control 2.2-dev documentation" href="../index.html"/>
<link rel="up" title="Developer’s Guide" href="index.html"/>
<link rel="next" title="Traffic Router API" href="traffic_router/traffic_router_api.html"/>
<link rel="prev" title="Traffic Portal" href="traffic_portal.html"/>
<script src="_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-nav-search">
<a href="/" class="icon icon-home"> Traffic Control
<img src="../_static/tc_logo_c_only.png" class="logo" />
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../basics/index.html">CDN Basics</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../basics/content_delivery_networks.html">Content Delivery Networks</a></li>
<li class="toctree-l2"><a class="reference internal" href="../basics/http_11.html">HTTP 1.1</a></li>
<li class="toctree-l2"><a class="reference internal" href="../basics/caching_proxies.html">Caching Proxies</a></li>
<li class="toctree-l2"><a class="reference internal" href="../basics/cache_revalidation.html">Cache Control Headers and Revalidation</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../overview/index.html">Traffic Control Overview</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../overview/introduction.html">Introduction</a></li>
<li class="toctree-l2"><a class="reference internal" href="../overview/traffic_ops.html">Traffic Ops</a></li>
<li class="toctree-l2"><a class="reference internal" href="../overview/traffic_portal.html">Traffic Portal</a></li>
<li class="toctree-l2"><a class="reference internal" href="../overview/traffic_router.html">Traffic Router</a></li>
<li class="toctree-l2"><a class="reference internal" href="../overview/traffic_monitor.html">Traffic Monitor</a></li>
<li class="toctree-l2"><a class="reference internal" href="../overview/traffic_stats.html">Traffic Stats</a></li>
<li class="toctree-l2"><a class="reference internal" href="../overview/traffic_vault.html">Traffic Vault</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../admin/index.html">Administrator’s Guide</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../admin/traffic_ops/installation.html">Traffic Ops - Installing</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/traffic_ops/default_profiles.html">Traffic Ops - Default Profiles</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/traffic_ops/migration_from_10_to_20.html">Traffic Ops - Migrating from 1.x to 2.x</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/traffic_ops/migration_from_20_to_22.html">Traffic Ops - Migrating from 2.0 to 2.2</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/traffic_ops/configuration.html">Traffic Ops - Configuring</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/traffic_ops/using.html">Traffic Ops - Using</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/traffic_ops/extensions.html">Managing Traffic Ops Extensions</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/traffic_portal/installation.html">Traffic Portal Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/traffic_portal/usingtrafficportal.html">Traffic Portal - Using</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/traffic_monitor.html">Traffic Monitor Administration (Legacy)</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/traffic_monitor_golang.html">Traffic Monitor Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/traffic_router.html">Traffic Router Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/traffic_stats.html">Traffic Stats Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/traffic_server.html">Traffic Server Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/traffic_vault.html">Traffic Vault Administration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../admin/quick_howto/index.html">Quick How To Guides</a></li>
</ul>
</li>
</ul>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Developer’s Guide</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="building.html">Building Traffic Control</a></li>
<li class="toctree-l2"><a class="reference internal" href="traffic_ops.html">Traffic Ops</a></li>
<li class="toctree-l2"><a class="reference internal" href="traffic_portal.html">Traffic Portal</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Traffic Router</a></li>
<li class="toctree-l2"><a class="reference internal" href="traffic_monitor.html">Traffic Monitor Golang</a></li>
<li class="toctree-l2"><a class="reference internal" href="traffic_stats.html">Traffic Stats</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../api/index.html">APIs</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../api/traffic_ops_api.html">API Overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="../api/routes.html">API Routes</a></li>
<li class="toctree-l2"><a class="reference internal" href="../api/v11/index.html">API 1.1 Reference</a></li>
<li class="toctree-l2"><a class="reference internal" href="../api/v12/index.html">API 1.2 Reference</a></li>
<li class="toctree-l2"><a class="reference internal" href="../api/v13/index.html">API 1.3 Reference</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../faq/index.html">FAQ</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../faq/general.html">General</a></li>
<li class="toctree-l2"><a class="reference internal" href="../faq/development.html">Development</a></li>
<li class="toctree-l2"><a class="reference internal" href="../faq/administration.html">Running a Traffic Control CDN</a></li>
</ul>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../glossary.html">Glossary</a></li>
</ul>
</div>
&nbsp;
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">Traffic Control</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html">Traffic Control 2.2-dev</a> &raquo;</li>
<li><a href="index.html">Developer’s Guide</a> &raquo;</li>
<li>Traffic Router</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/development/traffic_router.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="traffic_router/traffic_router_api.html" class="btn btn-neutral float-right" title="Traffic Router API">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="traffic_portal.html" class="btn btn-neutral" title="Traffic Portal"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<div role="main" class="document">
<div class="section" id="traffic-router">
<h1>Traffic Router<a class="headerlink" href="#traffic-router" title="Permalink to this headline"></a></h1>
<div class="section" id="introduction">
<h2>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline"></a></h2>
<p>Traffic Router is a Java Tomcat application that routes clients to the closest available cache on the CDN using both HTTP and DNS. Cache availability is determined by Traffic Monitor; consequently Traffic Router polls Traffic Monitor for its configuration and cache health state information, and uses this data to make routing decisions. HTTP routing is performed by localizing the client based on the request’s source IP address (IPv4 or IPv6), and issues an HTTP 302 redirect to the nearest cache. HTTP routing utilizes consistent hashing on request URLs to optimize cache performance and request distribution. DNS routing is performed by localizing clients, resolvers in most cases, requesting <code class="docutils literal notranslate"><span class="pre">A</span></code> and <code class="docutils literal notranslate"><span class="pre">AAAA</span></code> records for a configurable name such as <code class="docutils literal notranslate"><span class="pre">foo.deliveryservice.somecdn.net</span></code>. Traffic Router is comprised of seven separate Maven modules:</p>
<ul class="simple">
<li>shared - A reusable utility JAR for defining Delivery Service Certificates</li>
<li>configuration - A resuable JAR defining the ConfigurationListener interface</li>
<li>connector - A JAR that overrides Tomcat’s standard Http11Protocol Connector class and allows Traffic Router to delay opening listen sockets until it is in a state suitable for routing traffic</li>
<li>geolocation - Submodule for defining geolocation services</li>
<li>neustar - A Jar that provides a bean “neustarGeolocationService” that implements the GeolocationService interface defined in the geolocation maven submodule, which can optionally be added to the build of Traffic Router</li>
<li>core - Services DNS and HTTP requests, performs localization on routing requests, and is deployed as a WAR to a Service (read: connector/listen port) within Tomcat which is separate from api</li>
<li>build - A simple Maven project which gathers the artifacts from the modules and builds an RPM</li>
</ul>
</div>
<div class="section" id="software-requirements">
<h2>Software Requirements<a class="headerlink" href="#software-requirements" title="Permalink to this headline"></a></h2>
<p>To work on Traffic Router you need a *nix (MacOS and Linux are most commonly used) environment that has the following installed:</p>
<ul class="simple">
<li>Eclipse &gt;= Kepler SR2 (or another Java IDE)</li>
<li>Maven &gt;= 3.3.1</li>
<li>JDK &gt;= 8.0</li>
</ul>
</div>
<div class="section" id="traffic-router-project-tree-overview">
<h2>Traffic Router Project Tree Overview<a class="headerlink" href="#traffic-router-project-tree-overview" title="Permalink to this headline"></a></h2>
<ul>
<li><p class="first"><code class="docutils literal notranslate"><span class="pre">traffic_control/traffic_traffic_router/</span></code> - base directory for Traffic Router</p>
<blockquote>
<div><ul>
<li><p class="first"><code class="docutils literal notranslate"><span class="pre">connector/</span></code> - Source code for Traffic Router Connector;</p>
<blockquote>
<div><ul class="simple">
<li><code class="docutils literal notranslate"><span class="pre">src/main/java</span></code> - Java source directory for Traffic Router Connector</li>
</ul>
</div></blockquote>
</li>
<li><p class="first"><code class="docutils literal notranslate"><span class="pre">core/</span></code> - Source code for Traffic Router Core, which is built as its own deployable WAR file and communicates with Traffic Router API using JMX</p>
<blockquote>
<div><ul>
<li><p class="first"><code class="docutils literal notranslate"><span class="pre">src/main</span></code> - Main source directory for Traffic Router Core</p>
<blockquote>
<div><ul class="simple">
<li><code class="docutils literal notranslate"><span class="pre">etc/init.d</span></code> - Init script for Tomcat</li>
<li><code class="docutils literal notranslate"><span class="pre">conf/</span></code> - Minimum required configuration files</li>
<li><code class="docutils literal notranslate"><span class="pre">java/</span></code> - Java source code for Traffic Router Core</li>
<li><code class="docutils literal notranslate"><span class="pre">opt/tomcat/conf</span></code> - Contains Tomcat configuration file(s) pulled in during an RPM build</li>
<li><code class="docutils literal notranslate"><span class="pre">resources/</span></code> - Resources pulled in during an RPM build</li>
<li><code class="docutils literal notranslate"><span class="pre">scripts/</span></code> - Scripts used by the RPM build process</li>
<li><code class="docutils literal notranslate"><span class="pre">webapp/</span></code> - Java webapp resources</li>
</ul>
</div></blockquote>
</li>
<li><p class="first"><code class="docutils literal notranslate"><span class="pre">src/test</span></code> - Test source directory for Traffic Router Core</p>
<blockquote>
<div><ul>
<li><p class="first"><code class="docutils literal notranslate"><span class="pre">conf/</span></code> - Minimal Configuration files that make it possible to run junit tests</p>
</li>
<li><p class="first"><code class="docutils literal notranslate"><span class="pre">db/</span></code> - Files downloaded by unit tests</p>
</li>
<li><p class="first"><code class="docutils literal notranslate"><span class="pre">java/</span></code> - JUnit based unit tests for Traffic Router Core</p>
</li>
<li><p class="first"><code class="docutils literal notranslate"><span class="pre">resources/</span></code> - Example data files used by junit tests</p>
<blockquote>
<div><ul class="simple">
<li><code class="docutils literal notranslate"><span class="pre">var/auto-zones</span></code> - BIND formatted zone files generated by Traffic Router Core during unit testing</li>
</ul>
</div></blockquote>
</li>
</ul>
</div></blockquote>
</li>
</ul>
</div></blockquote>
</li>
</ul>
</div></blockquote>
</li>
</ul>
</div>
<div class="section" id="java-formatting-conventions">
<h2>Java Formatting Conventions<a class="headerlink" href="#java-formatting-conventions" title="Permalink to this headline"></a></h2>
<p>None at this time. The codebase will eventually be formatted per Java standards.</p>
</div>
<div class="section" id="installing-the-developer-environment">
<h2>Installing The Developer Environment<a class="headerlink" href="#installing-the-developer-environment" title="Permalink to this headline"></a></h2>
<p>To install the Traffic Router Developer environment:</p>
<ol class="arabic simple">
<li>Clone the traffic_control repository using Git.</li>
<li>Change directories into <code class="docutils literal notranslate"><span class="pre">traffic_control/traffic_router</span></code>.</li>
<li>Follow the instructions in “README.DNSSEC” for DNSSEC support.</li>
<li>Set the environment variable TRAFFIC_MONITOR_HOSTS to be a semicolon delimited list of Traffic Monitors that can be accessed during integration tests</li>
<li>Additional configuration is set using the below files:</li>
</ol>
<blockquote>
<div><ul>
<li><p class="first">core/src/test/conf/dns.properties - copy from core/src/main/conf</p>
</li>
<li><p class="first">core/src/test/conf/http.properties - copy from core/src/main/conf</p>
</li>
<li><p class="first">core/src/test/conf/log4j.properties - copy from core/src/main/conf</p>
</li>
<li><p class="first">core/src/test/conf/traffic_monitor.properties - copy from core/src/main/conf</p>
</li>
<li><p class="first">core/src/test/conf/traffic_ops.properties file holds the credentials for accessing Traffic Ops. - copy from core/src/main/conf</p>
</li>
<li><p class="first">Default configuration values now reside in core/src/main/webapp/WEB-INF/applicationContext.xml</p>
</li>
<li><p class="first">The above values may be overridden by creating and/or modifying the property files listed in core/src/main/resources/applicationProperties.xml</p>
</li>
<li><p class="first">Pre-existing properties files are still honored by Traffic Router. For example traffic_monitor.properties:</p>
<blockquote>
<div><table border="1" class="docutils">
<colgroup>
<col width="25%" />
<col width="75%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Parameter</th>
<th class="head">Value</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td><code class="docutils literal notranslate"><span class="pre">traffic_monitor.bootstrap.hosts</span></code></td>
<td>FQDN and port of the Traffic Monitor instance(s), separated by semicolons as necessary (do not include <a class="reference external" href="http://">http://</a>).</td>
</tr>
</tbody>
</table>
</div></blockquote>
</li>
</ul>
</div></blockquote>
<ol class="arabic" start="6">
<li><p class="first">Import the existing git repo into Eclipse:</p>
<blockquote>
<div><ol class="loweralpha simple">
<li>File -&gt; Import -&gt; Git -&gt; Projects from Git; Next</li>
<li>Existing local repository; Next</li>
<li>Add -&gt; browse to find <code class="docutils literal notranslate"><span class="pre">traffic_control</span></code>; Open</li>
<li>Select <code class="docutils literal notranslate"><span class="pre">traffic_control</span></code>; Next</li>
<li>Ensure “Import existing projects” is selected, expand <code class="docutils literal notranslate"><span class="pre">traffic_control</span></code>, select <code class="docutils literal notranslate"><span class="pre">traffic_router</span></code>; Next</li>
<li>Ensure <code class="docutils literal notranslate"><span class="pre">traffic_router_api</span></code>, <code class="docutils literal notranslate"><span class="pre">traffic_router_connector</span></code>, and <code class="docutils literal notranslate"><span class="pre">traffic_router_core</span></code> are checked; Finish (this step can take several minutes to complete)</li>
<li>Ensure <code class="docutils literal notranslate"><span class="pre">traffic_router_api</span></code>, <code class="docutils literal notranslate"><span class="pre">traffic_router_connector</span></code>, and <code class="docutils literal notranslate"><span class="pre">traffic_router_core</span></code> have been opened by Eclipse after importing</li>
</ol>
</div></blockquote>
</li>
<li><p class="first">From the terminal, run <code class="docutils literal notranslate"><span class="pre">mvn</span> <span class="pre">clean</span> <span class="pre">verify</span></code> from the <code class="docutils literal notranslate"><span class="pre">traffic_router</span></code> directory</p>
</li>
<li><p class="first">Start the embedded Tomcat instance for Core from within your IDE by following these steps:</p>
<blockquote>
<div><ol class="loweralpha">
<li><p class="first">In the package explorer, expand <code class="docutils literal notranslate"><span class="pre">traffic_router_core</span></code></p>
</li>
<li><p class="first">Expand <code class="docutils literal notranslate"><span class="pre">src/test/java</span></code></p>
</li>
<li><p class="first">Expand the package <code class="docutils literal notranslate"><span class="pre">com.comcast.cdn.traffic_control.traffic_router.core</span></code></p>
</li>
<li><p class="first">Open and run <code class="docutils literal notranslate"><span class="pre">TrafficRouterStart.java</span></code></p>
<blockquote>
<div><div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">If an error is displayed in the Console, run <code class="docutils literal notranslate"><span class="pre">mvn</span> <span class="pre">clean</span> <span class="pre">verify</span></code> from the <code class="docutils literal notranslate"><span class="pre">traffic_router</span></code> directory</p>
</div>
</div></blockquote>
</li>
</ol>
</div></blockquote>
</li>
</ol>
<p>9. Traffic Router Core should now be running; the Traffic Router API is available at <a class="reference external" href="http://localhost:3333">http://localhost:3333</a>, the HTTP routing interface is available on <a class="reference external" href="http://localhost:8888">http://localhost:8888</a> and HTTPS is available on <a class="reference external" href="http://localhost:8443">http://localhost:8443</a>.
The DNS server and routing interface is available on localhost:1053 via TCP and UDP.</p>
</div>
<div class="section" id="manual-testing">
<h2>Manual Testing<a class="headerlink" href="#manual-testing" title="Permalink to this headline"></a></h2>
<p>Look up the URL for your test ‘http’ Delivery Service in Traffic Ops and then:</p>
<p>curl -vs -H “Host: &lt;Delivery Service URL&gt;” <a class="reference external" href="http://localhost:8888/x">http://localhost:8888/x</a></p>
</div>
<div class="section" id="test-cases">
<h2>Test Cases<a class="headerlink" href="#test-cases" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li>Unit tests can be executed using Maven by running <code class="docutils literal notranslate"><span class="pre">mvn</span> <span class="pre">test</span></code> at the root of the <code class="docutils literal notranslate"><span class="pre">traffic_router</span></code> project.</li>
<li>Unit and Integration tests can be executed using Maven by running <code class="docutils literal notranslate"><span class="pre">mvn</span> <span class="pre">verify</span></code> at the root of the <code class="docutils literal notranslate"><span class="pre">traffic_router</span></code> project.</li>
</ul>
</div>
<div class="section" id="rpm-packaging">
<h2>RPM Packaging<a class="headerlink" href="#rpm-packaging" title="Permalink to this headline"></a></h2>
<p>Running <code class="docutils literal notranslate"><span class="pre">mvn</span> <span class="pre">package</span></code> on a Linux based distribution will trigger the build process to create the Traffic Router rpm.</p>
</div>
<div class="section" id="api">
<h2>API<a class="headerlink" href="#api" title="Permalink to this headline"></a></h2>
<p><a class="reference internal" href="traffic_router/traffic_router_api.html#reference-tr-api"><span class="std std-ref">Traffic Router API</span></a></p>
<div class="toctree-wrapper compound">
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="traffic_router/traffic_router_api.html" class="btn btn-neutral float-right" title="Traffic Router API">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="traffic_portal.html" class="btn btn-neutral" title="Traffic Portal"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span class="fa fa-book">Apache Traffic Control (Incubating)</span>
v:
<span class="fa fa-caret-down"></span>
</span>
<div class="rst-other-versions">
<dl>
<dt>Versions</dt>
<dd><a href="/docs/master/">latest</a></dd>
<dd><a href="/docs/2.0/">2.0</a></dd>
<dd><a href="/docs/1.8.1/">1.8</a></dd>
<dd><a href="/docs/1.7.0/">1.7</a></dd>
</dl>
<hr/>
Free document hosting provided by <a href="http://www.readthedocs.org">Read the Docs</a>.
</div>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../',
VERSION:'2.2-dev',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
</body>
</html>