public static IpProto fromJson(Object json) throws JSONParseException {
   if (json instanceof Integer) {
     return IpProto.of(((Integer) json).intValue());
   } else if (json instanceof String) {
     if (((String) json).equalsIgnoreCase("icmp")) return ICMP;
     else if (((String) json).equalsIgnoreCase("tcp")) return TCP;
     else if (((String) json).equalsIgnoreCase("udp")) return UDP;
     else throw new JSONParseException("Unknown IP protocol: " + (String) json);
   } else {
     throw new JSONParseException("Invalid value for IP protocol: " + json);
   }
 }
 @Override
 public IpProto applyMask(IpProto mask) {
   return IpProto.of(this.ipProto & mask.ipProto);
 }