{"id":1108,"date":"2010-12-03T19:43:28","date_gmt":"2010-12-03T19:43:28","guid":{"rendered":"http:\/\/mccltd.net\/blog\/?p=1108"},"modified":"2010-12-03T19:45:33","modified_gmt":"2010-12-03T19:45:33","slug":"static-routes-that-track-interfaces-or-other-routes","status":"publish","type":"post","link":"http:\/\/darenmatthews.com\/blog\/?p=1108","title":{"rendered":"Static Routes That Track Interfaces or Other Routes"},"content":{"rendered":"<p><a name=\"Id1994e0_994370\"><\/a><a name=\"Id1997e0_994368\"><\/a>How to install a static route only when an interface fails or a prefix drops  out of the routing table.<!--more--><\/p>\n<p><a name=\"Id1789e13565_Solution313977\"><\/a><\/p>\n<p>One of the interesting new features in IOS Versions 12.3T and  12.4 is the ability to track things like interface status or routing table  objects. This first example shows how to create a static route that tracks an  interface:<\/p>\n<pre>Router#<strong>configure terminal<\/strong>\r\nEnter configuration commands, one per line.  End with CNTL\/Z.\r\nRouter(config)#<strong>track <\/strong><strong><tt><em>10<\/em><\/tt><\/strong> <strong>interface <\/strong><strong><tt><em>Serial0\/0<\/em><\/tt><\/strong> <strong>line-protocol<\/strong>\r\nRouter(config-track)#<strong>delay down<\/strong> <strong><tt><em>5<\/em><\/tt><\/strong><strong> up <\/strong><strong><tt><em>30<\/em><\/tt><\/strong>\r\nRouter(config-track)#<strong>exit<\/strong>\r\nRouter(config)#<strong>ip route <\/strong><strong><tt><em>192.168.10.0 255.255.255.0 10.3.12.26<\/em><\/tt><\/strong> <strong>track<\/strong> <strong><tt><em>10<\/em><\/tt><\/strong>\r\nRouter(config)#<strong>end <\/strong>\r\nRouter#<\/pre>\n<p>This second example shows how to create a static route that  tracks a prefix in the IP routing table:<\/p>\n<pre>Router#<strong>configure terminal<\/strong>\r\nEnter configuration commands, one per line.  End with CNTL\/Z.\r\nRouter(config)#<strong>track <\/strong><strong><tt><em>11<\/em><\/tt><\/strong> <strong>ip route <\/strong><strong><tt><em>10.2.95.0 255.255.255.0 <\/em><\/tt><\/strong><strong>reachability<\/strong>\r\nRouter(config-track)#<strong>delay down<\/strong> <strong><tt><em>5 <\/em><\/tt><\/strong><strong>up <\/strong><strong><tt><em>5<\/em><\/tt><\/strong>\r\nRouter(config-track)#<strong>exit<\/strong>\r\nRouter(config)#<strong>ip route <\/strong><strong><tt><em>0.0.0.0 0.0.0.0<\/em><\/tt><\/strong> <strong><tt><em>10.3.12.26<\/em><\/tt><\/strong> <strong>track<\/strong> <strong><tt><em>11<\/em><\/tt><\/strong>\r\nRouter(config)#<strong>end <\/strong>\r\nRouter#<\/pre>\n<p>And the final example installs the static route when a  combination of the previous conditions is met:<\/p>\n<pre>Router#<strong>configure terminal<\/strong>\r\nEnter configuration commands, one per line.  End with CNTL\/Z.\r\nRouter(config)#<strong>track <\/strong><strong><tt><em>12<\/em><\/tt><\/strong> <strong>list boolean and<\/strong>\r\nRouter(config-track)#<strong>object <\/strong><strong><tt><em>10 <\/em><\/tt><\/strong><strong>not<\/strong>\r\nRouter(config-track)#<strong>object <\/strong><strong><tt><em>11<\/em><\/tt><\/strong><strong> <\/strong>\r\nRouter(config-track)#<strong>exit<\/strong>\r\nRouter(config)#<strong>ip route <\/strong><strong><tt><em>192.168.13.0 255.255.255.0<\/em><\/tt><\/strong> <strong><tt><em>10.3.12.26<\/em><\/tt><\/strong> <strong>track<\/strong> <strong><tt><em>12<\/em><\/tt><\/strong>\r\nRouter(config)#<strong>end<\/strong>\r\nRouter#<\/pre>\n<p><a name=\"Id1789e13983_Discussion314035\"><\/a><\/p>\n<p>You can use this  method in conjunction with floating statics, as the <span>ip  route track<\/span> command includes an optional administrative distance argument  at the end of the line:<\/p>\n<pre>Router(config)#<strong>ip route <\/strong><strong><tt><em>192.168.10.0 255.255.255.0 10.3.12.26<\/em><\/tt><\/strong> <strong>track<\/strong> <strong><tt><em>10 190<\/em><\/tt><\/strong><\/pre>\n<p>However, in most cases, this is probably not a good idea  because it will make your routing more complicated and consequently more  difficult to troubleshoot. Combining these two methods means that there are now  two potentially complicated and interrelated decisions to be made in selecting  which routes to install. So when you look at your routing table, you may not be  able to immediately see why a given route is or is not present. Since this  method does at least install the routes into the routing table, we prefer this  complicated method to policy-based routing, which is always complicated to  troubleshoot, but if you are tempted to use this feature, we recommend looking  for a simpler solution first.<\/p>\n<p>In <a href=\"I_0596527225_CHP_22.html#I_0596527225_CHP_22\">Chapter 22<\/a>, we will show  how Hot Standby Routing Protocol (HSRP) can also track changes in interfaces, or  how routing prefixes can affect which router is the default gateway for a  subnet. The track feature offers a flexible and general method for doing  this.<\/p>\n<p>In each of the different examples, there are two steps. First,  you define a tracked object:<\/p>\n<pre>Router(config)#<strong>track <\/strong><strong><tt><em>10<\/em><\/tt><\/strong> <strong>interface <\/strong><strong><tt><em>Serial0\/0<\/em><\/tt><\/strong> <strong>line-protocol<\/strong>\r\nRouter(config-track)#<strong>delay down<\/strong> <strong><tt><em>5<\/em><\/tt><\/strong><strong> up <\/strong><strong><tt><em>30<\/em><\/tt><\/strong>\r\nRouter(config-track)#<strong>exit<\/strong><\/pre>\n<p>In this case, we are tracking the line protocol state of  interface Serial0\/0. If the interface is in an up\/up state, then this object  will be considered &#8220;up&#8221; as well, and anything that is tracking this object will  respond accordingly.<\/p>\n<p>Note that we have also included a <span>delay<\/span> command in this example. By default the tracking  object will change state as soon as the router notices that the line protocol  has come up or gone down. However, this isn&#8217;t always a good idea. If this  interface is flapping up and down frequently, then it would be better to wait a  while to ensure that it&#8217;s really up. Also, some protocols, such as Frame Relay,  can take a significant length of time to establish end-to-end connectivity. The  <span>delay<\/span> command allows you to specify and  appropriate delay. In this case, we have opted to wait 5 seconds after the  interface goes down, and 30 seconds after it comes back up, before changing the  state of the tracking object.<\/p>\n<p>Once you have defined an object with the <span>track<\/span> command, you need to do something with that  object. In this case, we have created a static route:<\/p>\n<pre>Router(config)#<strong>ip route <\/strong><strong><tt><em>192.168.10.0 255.255.255.0 10.3.12.26<\/em><\/tt><\/strong> <strong>track<\/strong> <strong><tt><em>10<\/em><\/tt><\/strong><\/pre>\n<p>In <a href=\"I_0596527225_CHP_22.html#I_0596527225_CHP_22\">Chapter 22<\/a>, we will show  how to use these tracked objects with Hot Standby Routing Protocol (HSRP) and  Virtual Router Redundancy Protocol (VRRP), and introduce several other IOS  features that can also respond to tracked objects.<\/p>\n<p>To see the state of a tracking object, use the<span> show track<\/span> command:<\/p>\n<pre>Router#<strong>show track 10<\/strong>\r\nTrack 10\r\n  Interface Serial0\/0 line-protocol\r\n  Line protocol is Up\r\n    6 changes, last change 00:33:44\r\n  Delay up 30 secs, down 5 secs\r\n  Tracked by:\r\n    STATIC-IP-ROUTING 0\r\nRouter#<\/pre>\n<p>And you can see the corresponding static route as follows:<\/p>\n<pre>Router#<strong>show ip route track-table<\/strong>\r\nip route 192.168.10.0 255.255.255.0 10.3.12.26 track 10 state is [up]\r\nRouter#<\/pre>\n<p>If the tracked interface goes down, the tracked object follows  suit and the static route is removed:<\/p>\n<pre>Router#<strong>show track <\/strong><strong><tt><em>10<\/em><\/tt><\/strong>\r\nTrack 10\r\n  Interface Serial0\/0 line-protocol\r\n  Line protocol is Down (hw down)\r\n    7 changes, last change 00:00:03\r\n  Delay up 30 secs, down 5 secs\r\n  Tracked by:\r\n    STATIC-IP-ROUTING 0\r\nRouter#<strong>show ip route track-table<\/strong>\r\nip route 192.168.10.0 255.255.255.0 10.3.12.26 track 10 state is [down]\r\nRouter#<\/pre>\n<p>Cisco offers a useful alternative to merely tracking the Layer  2 line protocol. You can opt instead to track the interface&#8217;s Layer 3 IP  protocol state with the <span>ip routing<\/span> keywords:<\/p>\n<pre>Router(config)#<strong>track <\/strong><strong><tt><em>15<\/em><\/tt><\/strong> <strong>interface <\/strong><strong><tt><em>Serial0\/0<\/em><\/tt><\/strong> <strong>ip routing<\/strong>\r\nRouter(config-track)#<\/pre>\n<p>In the second example from the Solution section of this recipe,  we showed how to track a particular prefix from the IP routing table:<\/p>\n<pre>Router(config)#<strong>track <\/strong><strong><tt><em>11<\/em><\/tt><\/strong> <strong>ip route <\/strong><strong><tt><em>10.2.95.0 255.255.255.0 <\/em><\/tt><\/strong><strong>reachability<\/strong>\r\nRouter(config-track)#<strong>delay down<\/strong> <strong><tt><em>5 <\/em><\/tt><\/strong><strong>up <\/strong><strong><tt><em>5<\/em><\/tt><\/strong><\/pre>\n<p>When you check the status of this object, it shows several  useful pieces of information:<\/p>\n<pre>Router#<strong>show track <\/strong><strong><tt><em>11<\/em><\/tt><\/strong>\r\nTrack 11\r\n  IP route 10.2.95.0 255.255.255.0 reachability\r\n  Reachability is Up (EIGRP)\r\n    2 changes, last change 00:00:09\r\n  Delay up 5 secs, down 5 secs\r\n  First-hop interface is FastEthernet0\/0\r\n  Tracked by:\r\n    STATIC-IP-ROUTING 0\r\nRouter#<\/pre>\n<p>Here we can see that the tracked routing prefix is active in  the routing table, that it was learned by EIGRP, when it last changed state, and  even which interface the router uses to reach this destination.<\/p>\n<p>In the example, we have configured a static default route to be  installed whenever the dynamically learned one is also available:<\/p>\n<pre>Router(config)#<strong>ip route <\/strong><strong><tt><em>0.0.0.0 0.0.0.0<\/em><\/tt><\/strong> <strong><tt><em>10.3.12.26<\/em><\/tt><\/strong> <strong>track<\/strong> <strong><tt><em>11<\/em><\/tt><\/strong><\/pre>\n<p>The third example in the Solution section shows how you can  combine several tracked objects into one:<\/p>\n<pre>Router(config)#<strong>track <\/strong><strong><tt><em>12<\/em><\/tt><\/strong> <strong>list boolean and<\/strong>\r\nRouter(config-track)#<strong>object <\/strong><strong><tt><em>10 <\/em><\/tt><\/strong><strong>not<\/strong>\r\nRouter(config-track)#<strong>object <\/strong><strong><tt><em>11<\/em><\/tt><\/strong><strong> <\/strong>\r\nRouter(config-track)#<strong>exit<\/strong>\r\nRouter(config)#<strong>ip route <\/strong><strong><tt><em>192.168.13.0 255.255.255.0<\/em><\/tt><\/strong> <strong><tt><em>10.3.12.26<\/em><\/tt><\/strong> <strong>track<\/strong> <strong><tt><em>12<\/em><\/tt><\/strong><\/pre>\n<p>Here we have created a static route that is available only if  the condition of object 10 is down and object 11 is up:<\/p>\n<pre>Router#<strong>show track <\/strong><strong><tt><em>12<\/em><\/tt><\/strong>\r\nTrack 12\r\n  List boolean and\r\n  Boolean AND is Up\r\n    2 changes, last change 00:00:30\r\n    object 10 not Down\r\n    object 11 Up\r\n  Tracked by:\r\n    STATIC-IP-ROUTING 0\r\nRouter#<strong>show ip route track-table<\/strong>\r\n ip route 192.168.10.0 255.255.255.0 10.3.12.26 track 10 state is [down]\r\n ip route 0.0.0.0 0.0.0.0 10.3.12.26 track 11 state is [up]\r\n ip route 192.168.13.0 255.255.255.0 10.3.12.26 track 12 state is [up]\r\nRouter#<\/pre>\n<p>This allows you to construct some complex alternate routing  rules that are much more flexible than simple floating static routes. When you  get more complex rules that reference other rules like this, it can be useful to  use the brief keyword:<\/p>\n<pre>Router#<strong>show track brief<\/strong>\r\nTrack   Object                         Parameter        Value\r\n10      interface Serial0\/0            line-protocol    Down (hw down)\r\n11      ip route  10.2.95.0\/24         reachability     Up (EIGRP)\r\n12      list                           boolean          Up\r\nRouter#<\/pre>\n<p>We note in passing that there doesn&#8217;t appear to be much error  checking in this <span>list<\/span> feature. It is possible to  construct an infinite loop of rules where, for example, tracked object 100  tracks object 101, which in turn tracks only the negated object 100. Doing this  results in a constant flapping situation, which fortunately doesn&#8217;t crash the  router or run up the CPU, but isn&#8217;t terribly constructive nonetheless, so we  advise checking your logic carefully.<\/p>\n<p>All of the examples we have discussed so far use straight  binary up\/down logic, but in fact the <span>track<\/span> feature allows for shades of grey by means of the <span>threshold<\/span> keyword. Here is an example of the syntax for  this option:<\/p>\n<pre>Router#<strong>configure terminal<\/strong>\r\nEnter configuration commands, one per line.  End with CNTL\/Z.\r\nRouter(config)#<strong>track <\/strong><strong><tt><em>15<\/em><\/tt><\/strong> <strong>ip route <\/strong><strong><tt><em>10.4.4.4 255.255.255.4 <\/em><\/tt><\/strong><strong>metric threshold<\/strong>\r\nRouter(config-track)#<strong>threshold up <\/strong><strong><tt><em>99 <\/em><\/tt><\/strong><strong>down <\/strong><strong><tt><em>201<\/em><\/tt><\/strong>\r\nRouter(config-track)#<strong>exit<\/strong>\r\nRouter(config)#<strong>ip route <\/strong><strong><tt><em>0.0.0.0 0.0.0.0<\/em><\/tt><\/strong> <strong><tt><em>10.3.12.26<\/em><\/tt><\/strong> <strong>track<\/strong> <strong><tt><em>11<\/em><\/tt><\/strong>\r\nRouter(config)#<strong>end <\/strong>\r\nRouter#<\/pre>\n<p>The key to this command is the <span>threshold<\/span> command. The &#8220;up&#8221; and &#8220;down&#8221; threshold  numbers that you specify on this line represent the routing protocol metric  rescaled to a range from 0 to 255. What this actually corresponds to in practice  depends on your routing protocol. <a href=\"#I80472__TableLabel__Table_5_4\">Table 5-4<\/a> shows how to convert between  routing protocol metrics and threshold numbers.<\/p>\n<p><a name=\"I80472__TableLabel__Table_5_4\"><\/a><\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"4\" width=\"100%\" rules=\"all\">\n<caption>\n<h5>Table 5-4. Default conversion factors for scaled  metrics<\/h5>\n<\/caption>\n<colgroup span=\"2\"><\/colgroup>\n<thead>\n<tr>\n<th scope=\"col\">Routing protocol<\/th>\n<th scope=\"col\">Default conversion rule<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>RIP<\/td>\n<td>Multiply by 17<\/td>\n<\/tr>\n<tr>\n<td>EIGRP<\/td>\n<td>Divide by 2,560<\/td>\n<\/tr>\n<tr>\n<td>OSPF<\/td>\n<td>Divide by 1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>We haven&#8217;t included BGP in this table because BGP metrics don&#8217;t  work in the same way, and consequently aren&#8217;t supported with this feature.<\/p>\n<p>As an aside, you can change these conversion values for EIGRP  and OSPF (but not RIP) by specifying the new conversion rule value in the <span>track resolution<\/span> command:<\/p>\n<pre>Router(config)#<strong>track resolution ip route ospf <\/strong><strong><tt><em>100<\/em><\/tt><\/strong>\r\nRouter(config)#<strong>track resolution ip route eigrp <\/strong><strong><tt><em>10000<\/em><\/tt><\/strong><\/pre>\n<p>This example will change the conversion factor from the default  values shown in <a href=\"#I80472__TableLabel__Table_5_4\">Table  5-4<\/a> to new values of 100 for OSPF and 10,000 for EIGRP.<\/p>\n<p>In our example, we have configured an &#8220;up&#8221; threshold of 99 and  a &#8220;down&#8221; threshold of 201, and we&#8217;re using EIGRP for our routing protocol. This  means that when the scaled metric value is less than or equal to 99 (EIGRP  metric of 253,440, by default), the tracked object will be considered &#8220;up.&#8221;  Similarly, when the scaled metric is greater than or equal to 201 (EIGRP metric  of 514,560, by default), it will be considered &#8220;down.&#8221;<\/p>\n<p>When the metric is in between these two values, the state of  the tracked object depends on how it has changed. These are classic &#8220;rising&#8221; and  &#8220;falling&#8221; thresholds, which we will discuss in more detail in <a href=\"I_0596527225_CHP_17.html#I_0596527225_CHP_17\">Chapter 17<\/a>. If the  metric rises from a value below the &#8220;down&#8221; threshold value (201) to a higher  value, then the tracked object changes state from &#8220;up&#8221; to &#8220;down.&#8221; Conversely, if  the metric falls from above to below the &#8220;up&#8221; threshold (99), then the tracked  object changes state to &#8220;up.&#8221;<\/p>\n<p>The <span>track list<\/span> feature also  allows you to work in logical shades of grey when you use the <span>threshold<\/span> option:<\/p>\n<pre>Router(config)#<strong>track <\/strong><strong><tt><em>50<\/em><\/tt><\/strong> <strong>interface <\/strong><strong><tt><em>Serial0\/0<\/em><\/tt><\/strong> <strong>line-protocol<\/strong>\r\nRouter(config)#<strong>track <\/strong><strong><tt><em>51<\/em><\/tt><\/strong> <strong>interface <\/strong><strong><tt><em>Serial0\/1<\/em><\/tt><\/strong> <strong>line-protocol<\/strong>\r\nRouter(config)#<strong>track <\/strong><strong><tt><em>52<\/em><\/tt><\/strong> <strong>interface <\/strong><strong><tt><em>FastEthernet0\/0<\/em><\/tt><\/strong> <strong>line-protocol<\/strong>\r\nRouter(config)#<strong>track <\/strong><strong><tt><em>100<\/em><\/tt><\/strong> <strong>list threshold percentage<\/strong>\r\nRouter(config-track)#<strong>object <\/strong><strong><tt><em>50<\/em><\/tt><\/strong>\r\nRouter(config-track)#<strong>object <\/strong><strong><tt><em>51<\/em><\/tt><\/strong>\r\nRouter(config-track)#<strong>object <\/strong><strong><tt><em>52<\/em><\/tt><\/strong>\r\nRouter(config-track)#<strong>threshold percentage up <\/strong><strong><tt><em>65<\/em><\/tt><\/strong><strong> down <\/strong><strong><tt><em>34<\/em><\/tt><\/strong>\r\nRouter(config-track)#<strong>exit<\/strong>\r\nRouter(config)#<strong>ip route <\/strong><strong><tt><em>192.168.13.0 255.255.255.0<\/em><\/tt><\/strong> <strong><tt><em>10.3.12.26<\/em><\/tt><\/strong> <strong>track<\/strong> <strong><tt><em>100<\/em><\/tt><\/strong><\/pre>\n<p>In this example, we create a list of tracking objects that are  associated with interfaces. Then we say that we want this list to be considered  &#8220;up&#8221; if 65 percent or more of the objects in the list are &#8220;up&#8221; and &#8220;down&#8221; if 34  percent or less are &#8220;down.&#8221; So, if any two of the three in this example are  &#8220;up,&#8221; the whole list is considered &#8220;up,&#8221; and if two or more are &#8220;down,&#8221; the  whole list is &#8220;down.&#8221;<\/p>\n<p>You can see the state of the list as well as the individual  objects very neatly with the <span>show track <\/span>command:<\/p>\n<pre>Router#<strong>show track <\/strong><strong><tt><em>100<\/em><\/tt><\/strong>\r\nTrack 100\r\n  List threshold percentage\r\n  Threshold Percentage is Up (66%)\r\n    4 changes, last change 00:00:27\r\n    object 50 Up (33%)\r\n    object 51 Down (0%)\r\n    object 52 Up (33%)\r\n  Threshold percentage down 34% up 65%\r\n  Tracked by:\r\n    STATIC-IP-ROUTING 0\r\nRouter#<\/pre>\n<p>There is another way to construct such a list, using the <span>weight<\/span> keyword:<\/p>\n<pre>Router(config)#<strong>track <\/strong><strong><tt><em>101<\/em><\/tt><\/strong> <strong>list threshold weight<\/strong>\r\nRouter(config-track)#<strong>object <\/strong><strong><tt><em>50 <\/em><\/tt><\/strong><strong>weight<\/strong><strong><tt><em> 10<\/em><\/tt><\/strong>\r\nRouter(config-track)#<strong>object <\/strong><strong><tt><em>51 <\/em><\/tt><\/strong><strong>weight<\/strong><strong><tt><em> 15<\/em><\/tt><\/strong>\r\nRouter(config-track)#<strong>object <\/strong><strong><tt><em>52 <\/em><\/tt><\/strong><strong>weight<\/strong><strong><tt><em> 20<\/em><\/tt><\/strong>\r\nRouter(config-track)#<strong>threshold weight down 15 up 30<\/strong>\r\nRouter(config-track)#<strong>exit<\/strong><\/pre>\n<p>Using this method, you can assign different weighting values to  each of the objects in the list to define their relative importance in your  network. In this case, we have set the &#8220;up&#8221; threshold to a value of 30. This can  be achieved if object 52 is up at the same time as either of 50 or 51. But it is  not sufficient to have both 50 and 51 &#8220;up&#8221; if 52 is &#8220;down:&#8221;<\/p>\n<pre>Router#<strong>show track <\/strong><strong><tt><em>101<\/em><\/tt><\/strong>\r\nTrack 101\r\n  List threshold weight\r\n  Threshold Weight is Up (30\/45)\r\n    2 changes, last change 00:07:33\r\n    object 50 Up (10\/45)\r\n    object 51 weight 15 Down (0\/45)\r\n    object 52 weight 20 Up (20\/45)\r\n  Threshold weight down 15 up 30\r\nRouter#<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>How to install a static route only when an interface fails or a prefix drops out of the routing table.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[83],"tags":[],"_links":{"self":[{"href":"http:\/\/darenmatthews.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1108"}],"collection":[{"href":"http:\/\/darenmatthews.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/darenmatthews.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/darenmatthews.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/darenmatthews.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1108"}],"version-history":[{"count":2,"href":"http:\/\/darenmatthews.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1108\/revisions"}],"predecessor-version":[{"id":1110,"href":"http:\/\/darenmatthews.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1108\/revisions\/1110"}],"wp:attachment":[{"href":"http:\/\/darenmatthews.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1108"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/darenmatthews.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1108"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/darenmatthews.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}