\chapter{Les méthodes}

\section{route}

La méthode "route" retourne la route (\lstinline{Route}), utilisée par l'équipement (\lstinline{Device}) pour atteindre le réseau spécifié. 

\begin{lstlisting}[language=Ruby]
  # Params:
  # * network: an IPv4 network to test
  def route(network)
    ip_net = IPAddr.new network
    ip = ip_net.to_i

    candidate_routes = routes.where(:start_ip.lte => ip, :end_ip.gte => ip)

    choosed_route(candidate_routes)
  end
\end{lstlisting}

\section{crossed?}

La méthode "crossed?" est un élément essentiel pour l'analyse des règles de sécurité (\lstinline{Policy}). Elle permet de déterminer sur un équipement (\lstinline{Device}) est traversé par un flux définit par deux réseaux. Pour cela, il faut utiliser la méthode "route" de la table de routage (\lstinline{RoutingTable}) de l'équipement en question et comparer l'interface de sortie des deux routes (Route) retourné. Si elles sont différentes, cela signifique que le flux traverse ce firewall.

\begin{lstlisting}[language=Ruby]
    # Params:
    # * network1: the *source* network
    # * network2: the *destination* network
    def crossed?(network1, network2)
      return false unless routing_table
      route1 = routing_table.route(network1)
      route2 = routing_table.route(network2)

      return false unless route1 && route2
      route1.interface != route2.interface
    end
\end{lstlisting}