Lines Matching refs:gen

594         // Append a filter for this RA to {@code gen}. Jump to DROP_LABEL if it should be dropped.
597 long generateFilterLocked(ApfGenerator gen) throws IllegalInstructionException {
600 gen.addLoadFromMemory(Register.R0, gen.PACKET_SIZE_MEMORY_SLOT);
601 gen.addJumpIfR0NotEquals(mPacket.capacity(), nextFilterLabel);
604 gen.addLoadFromMemory(Register.R0, gen.FILTER_AGE_MEMORY_SLOT);
605 gen.addJumpIfR0GreaterThan(filterLifetime, nextFilterLabel);
614 gen.addLoadImmediate(Register.R0, nonLifetime.first);
615 gen.addJumpIfBytesNotEqual(Register.R0,
630 case 4: gen.addLoad32(Register.R0, offset); break;
631 case 2: gen.addLoad16(Register.R0, offset); break;
634 gen.addJumpIfR0LessThan(filterLifetime, nextFilterLabel);
637 gen.addJump(gen.DROP_LABEL);
638 gen.defineLabel(nextFilterLabel);
686 private void generateArpFilterLocked(ApfGenerator gen) throws IllegalInstructionException {
706 gen.addLoadImmediate(Register.R0, ARP_HEADER_OFFSET);
707 gen.addJumpIfBytesNotEqual(Register.R0, ARP_IPV4_HEADER, gen.PASS_LABEL);
710 gen.addLoad16(Register.R0, ARP_OPCODE_OFFSET);
711 gen.addJumpIfR0Equals(ARP_OPCODE_REQUEST, checkTargetIPv4); // Skip to unicast check
712 gen.addJumpIfR0NotEquals(ARP_OPCODE_REPLY, gen.PASS_LABEL);
715 gen.addLoadImmediate(Register.R0, ETH_DEST_ADDR_OFFSET);
716 gen.addJumpIfBytesNotEqual(Register.R0, ETH_BROADCAST_MAC_ADDRESS, gen.PASS_LABEL);
719 gen.defineLabel(checkTargetIPv4);
722 gen.addLoad32(Register.R0, ARP_TARGET_IP_ADDRESS_OFFSET);
723 gen.addJumpIfR0Equals(IPV4_ANY_HOST_ADDRESS, gen.DROP_LABEL);
727 gen.addLoadImmediate(Register.R0, ARP_TARGET_IP_ADDRESS_OFFSET);
728 gen.addJumpIfBytesNotEqual(Register.R0, mIPv4Address, gen.DROP_LABEL);
731 gen.addJump(gen.PASS_LABEL);
741 private void generateIPv4FilterLocked(ApfGenerator gen) throws IllegalInstructionException {
760 gen.addLoad8(Register.R0, IPV4_PROTOCOL_OFFSET);
761 gen.addJumpIfR0NotEquals(IPPROTO_UDP, skipDhcpv4Filter);
763 gen.addLoad16(Register.R0, IPV4_FRAGMENT_OFFSET_OFFSET);
764 gen.addJumpIfR0AnyBitsSet(IPV4_FRAGMENT_OFFSET_MASK, skipDhcpv4Filter);
766 gen.addLoadFromMemory(Register.R1, gen.IPV4_HEADER_SIZE_MEMORY_SLOT);
767 gen.addLoad16Indexed(Register.R0, UDP_DESTINATION_PORT_OFFSET);
768 gen.addJumpIfR0NotEquals(DHCP_CLIENT_PORT, skipDhcpv4Filter);
770 gen.addLoadImmediate(Register.R0, DHCP_CLIENT_MAC_OFFSET);
772 gen.addAddR1();
773 gen.addJumpIfBytesNotEqual(Register.R0, mHardwareAddress, skipDhcpv4Filter);
774 gen.addJump(gen.PASS_LABEL);
777 gen.defineLabel(skipDhcpv4Filter);
780 gen.addLoad8(Register.R0, IPV4_DEST_ADDR_OFFSET);
781 gen.addAnd(0xf0);
782 gen.addJumpIfR0Equals(0xe0, gen.DROP_LABEL);
785 gen.addLoad32(Register.R0, IPV4_DEST_ADDR_OFFSET);
786 gen.addJumpIfR0Equals(IPV4_BROADCAST_ADDRESS, gen.DROP_LABEL);
789 gen.addJumpIfR0Equals(broadcastAddr, gen.DROP_LABEL);
793 gen.addLoadImmediate(Register.R0, ETH_DEST_ADDR_OFFSET);
794 gen.addJumpIfBytesNotEqual(Register.R0, ETH_BROADCAST_MAC_ADDRESS, gen.PASS_LABEL);
795 gen.addJump(gen.DROP_LABEL);
799 gen.addJump(gen.PASS_LABEL);
810 private void generateIPv6FilterLocked(ApfGenerator gen) throws IllegalInstructionException {
822 gen.addLoad8(Register.R0, IPV6_NEXT_HEADER_OFFSET);
828 gen.addJumpIfR0Equals(IPPROTO_ICMPV6, skipIpv6MulticastFilterLabel);
831 gen.addLoad8(Register.R0, IPV6_DEST_ADDR_OFFSET);
832 gen.addJumpIfR0Equals(0xff, gen.DROP_LABEL);
834 gen.addJump(gen.PASS_LABEL);
835 gen.defineLabel(skipIpv6MulticastFilterLabel);
838 gen.addJumpIfR0NotEquals(IPPROTO_ICMPV6, gen.PASS_LABEL);
843 gen.addLoad8(Register.R0, ICMP6_TYPE_OFFSET);
845 gen.addJumpIfR0Equals(ICMP6_ROUTER_SOLICITATION, gen.DROP_LABEL);
847 gen.addJumpIfR0NotEquals(ICMP6_NEIGHBOR_ANNOUNCEMENT, skipUnsolicitedMulticastNALabel);
850 gen.addLoadImmediate(Register.R0, IPV6_DEST_ADDR_OFFSET);
851 gen.addJumpIfBytesNotEqual(Register.R0, IPV6_ALL_NODES_ADDRESS,
853 gen.addJump(gen.DROP_LABEL);
854 gen.defineLabel(skipUnsolicitedMulticastNALabel);
875 ApfGenerator gen = new ApfGenerator();
877 gen.setApfVersion(mApfCapabilities.apfVersionSupported);
893 gen.addLoad16(Register.R0, ETH_ETHERTYPE_OFFSET);
894 gen.addJumpIfR0NotEquals(ETH_P_ARP, skipArpFiltersLabel);
895 generateArpFilterLocked(gen);
896 gen.defineLabel(skipArpFiltersLabel);
903 gen.addJumpIfR0NotEquals(ETH_P_IP, skipIPv4FiltersLabel);
904 generateIPv4FilterLocked(gen);
905 gen.defineLabel(skipIPv4FiltersLabel);
912 gen.addJumpIfR0Equals(ETH_P_IPV6, ipv6FilterLabel);
915 gen.addLoadImmediate(Register.R0, ETH_DEST_ADDR_OFFSET);
916 gen.addJumpIfBytesNotEqual(Register.R0, ETH_BROADCAST_MAC_ADDRESS, gen.PASS_LABEL);
917 gen.addJump(gen.DROP_LABEL);
920 gen.defineLabel(ipv6FilterLabel);
921 generateIPv6FilterLocked(gen);
922 return gen;
937 ApfGenerator gen = beginProgramLocked();
939 ra.generateFilterLocked(gen);
941 if (gen.programLengthOverEstimate() > mApfCapabilities.maximumApfProgramSize) break;
945 gen = beginProgramLocked();
947 programMinLifetime = Math.min(programMinLifetime, ra.generateFilterLocked(gen));
951 program = gen.generate();