anchor.diff:  %% @doc Convert process state when code is changed
   %% @end
   %%--------------------------------------------------------------------
  +code_change(_OldVsn, {state, Dev, Port, Pubsub, Osifconfig}, _Extra) ->
  +    {state, Dev, ?DEFAULT_MAC, Port, Pubsub, Osifconfig};
   code_change(_OldVsn, State, _Extra) ->
       {ok, State}.
   
   %%--------------------------------------------------------------------
   %%% Internal functions
   %%--------------------------------------------------------------------
  +
  +publish_rx(Frame, Decoded, S = #state{}) ->
  +    publish({rx, Frame, Decoded}, S).
  +
  +publish_tx(Frame, Term, S = #state{}) ->
  +    publish({tx, Frame, Term}, S).
  +
  +publish(Message, #state{pubsub=P}) ->
  +    pubsub:send({enet, {?MODULE, self()}, Message}, P).
  
positive.code: %% @end
  %%--------------------------------------------------------------------
  start_link(Device, IfConfig) when is_list(Device), is_list(IfConfig) ->
      gen_server:start_link(?MODULE, [#state{dev=Device}, IfConfig], []).
  
  start(Device, IfConfig) when is_list(Device), is_list(IfConfig) ->
      gen_server:start(?MODULE, [#state{dev=Device}, IfConfig], []).
  
negative.code: -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
           terminate/2, code_change/3]).
  
  -define(DEFAULT_MAC, <<16#00,16#00,16#00,16#aa,16#bb,16#cc>>).
  
  -record(state, {dev :: string(),
                  mac = ?DEFAULT_MAC :: ethernet_address(),
                  port :: port(),
                  pubsub = pubsub:new() :: pubsub:pubsub(),
                  osifconfig :: string(),
                  promisc = false :: boolean()
                 }).
  
  %%====================================================================
  %% API
  