\section{Méthodes} \subsection{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} \subsection{crossed?} \label{sec:methodes: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} \subsection{matched\_policies} \label{sec:methodes:matched_policies}