| .. Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| .. include:: ../../../common.defs |
| |
| .. _developer-plugins-getting-started-simple-plugin: |
| |
| A Simple Plugin |
| *************** |
| |
| This section describes how to write, compile, configure, and run a |
| simple Traffic Server plugin. You'll follow the steps below: |
| |
| 1. Make sure that your plugin source code contains an :c:func:`TSPluginInit` |
| initialization function. |
| |
| 2. Compile your plugin source code, creating a shared library. |
| |
| 3. Add an entry to :file:`plugin.config`. |
| |
| 4. Add the path to your plugin shared library into :file:`records.config`. |
| |
| 5. Restart Traffic Server. |
| |
| Compile Your Plugin |
| =================== |
| |
| The process for compiling a shared library varies with the platform |
| used, so the Traffic Server API provides the tsxs tool which you can use |
| to create shared libraries on all the supported Traffic Server |
| platforms. |
| |
| Example |
| ------- |
| |
| Assuming the sample program is stored in the file ``hello_world.c``, you |
| could use the following commands to build a shared library:: |
| |
| tsxs -o hello_world.so -c hello_world.c |
| |
| ``tsxs`` is installed in the ``bin`` directory of |TS|. |
| |
| This shared library will be your plugin. In order to install it, run:: |
| |
| sudo tsxs -o hello_world.so -i |
| |
| or the equivalent to ``sudo`` on your platform. |
| |
| Update the plugin configuration file |
| ==================================== |
| |
| Your next step is to tell Traffic Server about the plugin by adding the |
| following line to :file:`plugin.config` file. Since our simple plugin |
| does not require any arguments, the following :file:`plugin.config` will |
| work:: |
| |
| # a simple plugin.config for hello_world |
| hello_world.so |
| |
| |TS| can accommodate multiple plugins. If several plugin |
| functions are triggered by the same event, then Traffic Server invokes |
| each plugin's function in the order each was defined in :file:`plugin.config`. |
| |
| .. _specify-the-plugins-location: |
| |
| Specify the Plugin's Location |
| ============================= |
| |
| All plugins must be located in the directory specified by the |
| configuration variable ``proxy.config.plugin.plugin_dir``, which is |
| located in the :file:`records.config` file. The directory can be specified |
| as an absolute or relative path. |
| |
| If a relative path is used, then the starting directory will be the |
| Traffic Server installation directory as specified in |
| ``etc/traffic_server``. The default value is ``libexec/trafficserver``, |
| but this can vary based on how the software was configured and built. It |
| is common to use the default directory. Be sure to place the shared |
| library ``hello_world.so`` inside the directory you've configured. |
| |
| Restart Traffic Server |
| ====================== |
| |
| The last step is to start/restart Traffic Server. Shown below is the |
| output displayed after you've created and loaded your ``hello_world`` |
| plugin. |
| |
| :: |
| |
| # ls libexec/trafficserver |
| hello_world.so* |
| # bin/traffic_server |
| [Mar 27 19:06:31.669] NOTE: updated diags config |
| [Mar 27 19:06:31.680] NOTE: loading plugin 'libexec/trafficserver/hello_world.so' |
| hello world |
| [Mar 27 19:06:32.046] NOTE: cache disabled (initializing) |
| [Mar 27 19:06:32.053] NOTE: cache enabled |
| [Mar 27 19:06:32.526] NOTE: Traffic Server running |
| |
| .. note:: |
| |
| In the example above, Traffic Server notes are directed to the |
| console by specifying ``E`` for :ts:cv:`proxy.config.diags.output.note` in |
| :file:`records.config`. The second note shows Traffic Server attempting to |
| load the ``hello_world`` plugin. The third line of Traffic Server output |
| is from your plugin. |