public Zen <byte> Forward(Zen <Packet> packet, int i) { if (i == this.Rules.Length) { return(Byte(0)); // 0 is the null interface } var rule = this.Rules[i]; return(If( rule.Matches(packet.GetCurrentHeader()), rule.Interface.PortNumber, Forward(packet, i + 1))); }