anchor.diff:  %% are installed in table 0 with priority Priority.
   %% If Key is ``default'', clear all flows on the default switch.
   %% @end
  --spec dns_tap(switch_key(), integer(), integer(), integer(), integer(), ipaddress() | [ipaddress{}]) -> {ok, ofp_message()} | {error, error_reason()}.
  +-spec dns_tap(switch_key(), integer(), integer(), integer(), integer(), ipaddress() | [ipaddress()]) -> {ok, ofp_message()} | {error, error_reason()}.
   dns_tap(Key, Priority, Port1, Port2, Port3, DnsIps) when is_list(DnsIps) ->
       [dns_tap(Key, Priority, Port1, Port2, Port3, DnsIp) || DnsIp <- DnsIps];
   dns_tap(Key, Priority, Port1, Port2, Port3, DnsIp = {_,_,_,_}) ->
  
positive.code:     ok.
  
  %% @equiv tapestry_config(default, Filename)
  -sepc tapestry_config(string()) -> ok.
  tapestry_config(Filename) ->
      tapestry_config(default, Filename).
  
  
negative.code: %% the controller.  Bridge between Port1 and Port2.
  %% If Key is ``default'', clear all flows on the default switch.
  %% @end
  -spec tapestry_config(switch_key(), integer(), integer(), [ipaddress()]) -> ok.
  tapestry_config(Key, Port1, Port2, DnsIps) ->
      ?DEBUG("clear_flows: ~p~n", [clear_flows(Key, 0)]),
      ?DEBUG("dns_tap: ~p~n",
  