Let's get some final changes, so that we can hopefully merge this patch
On 22.02.2017 15:27, Nikhil Agarwal wrote:
> Signed-off-by: Nikhil Agarwal <[email protected]>
> ---
[skipped]
> + /* Read the source MAC address for this interface */
> + ret = odp_pktio_mac_addr(pktio, src_mac, sizeof(src_mac));
> + if (ret < 0) {
> + EXAMPLE_ABORT("Error: failed during MAC address get for %s\n",
> + intf);
> + }
> +
> + printf("Created pktio:%02" PRIu64 "\n", odp_pktio_to_u64(pktio));
This needs #include <inttypes.h>
> +
> + /* Resolve any routes using this interface for output */
> + resolve_fwd_db(intf, pktout, src_mac);
> +}
> +
[skipped]
> +
> + } else if (ODP_EVENT_IPSEC_RESULT == odp_event_type(ev)) {
> + odp_ipsec_op_result_t result;
> + odp_ipsec_packet_result_t res;
> + odph_ethhdr_t *eth;
> + odp_packet_t out_pkt;
> +
> + result.pkt = &out_pkt;
> + result.res = &res;
> +
> + if (odp_unlikely(odp_ipsec_result(&result, ev) < 0)) {
> + EXAMPLE_DBG("Error Event\n");
> + odp_packet_free((odp_packet_t)ev);
This should be odp_event_free()
> + continue;
> + }
> +
> + if (odp_unlikely(res.status.all)) {
> + odp_packet_free((odp_packet_t)ev);
I'm unsure here. event should be already freed by odp_isec_result(). So
you should only free packets from result, not the event.
> + continue;
> + }
> +
> + odph_ipv4hdr_t *ip = (odph_ipv4hdr_t
> *)odp_packet_l3_ptr(out_pkt, NULL);
> +
> + if (ip->proto != IPPROTO_ESP) {
> + rc = do_route_fwd_db(out_pkt);
> + if (odp_unlikely(rc))
> + continue;
> + }
> +
> + out_port = (odp_out_entry_t
> *)odp_packet_user_ptr(out_pkt);
> + out_queue = (odp_pktout_queue_t)out_port->pktout;
> +
> + eth = (odph_ethhdr_t *)((void *)ip -
> sizeof(odph_ethhdr_t));
Void pointer arithmetics is an extension. Could you please change that
to uint8_t *.
> + eth->dst = out_port->next_hop_addr;
> + eth->src = out_port->addr;
> + eth->type = odp_cpu_to_be_16(0x800);
> +
> + if (odp_unlikely(odp_pktout_send(out_queue, &out_pkt,
> 1) < 0))
> + odp_packet_free(out_pkt);
And here also just free packet, not an event.
> + } else {
> + EXAMPLE_DBG("Invalid Event\n");
> + odp_packet_free((odp_packet_t)ev);
And here of course just call odp_event_free(), not packet_free!
> + continue;
> + }
> + }
> +
[skipped]
> +/**
> + * Hash calculation utility
> + */
> +#define JHASH_GOLDEN_RATIO 0x9e3779b9
> +#define rot(x, k) (((x) << (k)) | ((x) >> (32 - (k))))
> +#define ODP_BJ3_MIX(a, b, c) \
This is what Maxim wrote about. Could you please rename these two
defines so that they don't pollute ODP_ namespace.
> +{ \
> + a -= c; a ^= rot(c, 4); c += b; \
> + b -= a; b ^= rot(a, 6); a += c; \
> + c -= b; c ^= rot(b, 8); b += a; \
> + a -= c; a ^= rot(c, 16); c += b; \
> + b -= a; b ^= rot(a, 19); a += c; \
> + c -= b; c ^= rot(b, 4); b += a; \
> +}
> +
> +/**
> + * Default Hash bucket number
> + */
> +#define ODP_DEFAULT_BUCKET_COUNT 1024
[skipped]
> +static inline
> +int parse_key_string(char *keystring,
> + ipsec_key_t *key,
> + ipsec_alg_t *alg)
> +{
> + int idx;
> + int key_bits_in = KEY_STR_BITS(keystring);
> + char temp[3];
> +
> + key->length = 0;
> +
> + /* Algorithm is either cipher or authentication */
> + if (alg->cipher) {
> + if ((alg->u.cipher == ODP_CIPHER_ALG_3DES_CBC) &&
> + (KEY_BITS_3DES == key_bits_in))
> + key->length = key_bits_in / 8;
> + if ((alg->u.cipher == ODP_CIPHER_ALG_AES128_CBC) &&
ODP_CIPHER_ALG_AES_CBC?
> + (KEY_BITS_AES == key_bits_in))
> + key->length = key_bits_in / 8;
> + } else {
> + if ((alg->u.auth == ODP_AUTH_ALG_MD5_96) &&
ODP_AUTH_ALG_MD5_HMAC
> + (KEY_BITS_MD5_96 == key_bits_in))
> + key->length = key_bits_in / 8;
> + if ((alg->u.auth == ODP_AUTH_ALG_SHA1_96) &&
ODP_AUTH_ALG_SHA1_HMAC
> + (KEY_BITS_SHA1_96 == key_bits_in))
> + key->length = key_bits_in / 8;
> + if ((alg->u.auth == ODP_AUTH_ALG_SHA256_128) &&
OD_AUTH_ALG_SHA256_HMAC
> + (KEY_BITS_SHA2_256 == key_bits_in))
> + key->length = key_bits_in / 8;
> + }
> +
[skipped]
> + case 2:
> + if (cipher) {
> + if (0 == strcmp(token, "3des")) {
> + entry->alg.u.cipher =
> + ODP_CIPHER_ALG_3DES_CBC;
> + } else if (0 == strcmp(token, "aes")) {
> + entry->alg.u.cipher =
> + ODP_CIPHER_ALG_AES128_CBC;
ODP_CIPHER_ALG_AES_CBC
> + } else {
> + entry->alg.u.cipher =
> + ODP_CIPHER_ALG_NULL;
> + }
> + } else {
> + if (0 == strcmp(token, "md5")) {
> + entry->alg.u.auth =
> + ODP_AUTH_ALG_MD5_96;
ODP_AUTH_ALG_MD5_HMAC
> + } else if (0 == strcmp(token, "sha1")) {
> + entry->alg.u.auth =
> + ODP_AUTH_ALG_SHA1_96;
ODP_AUTH_ALG_SHA1_HMAC
> + } else if (0 == strcmp(token, "sha256")) {
> + entry->alg.u.auth =
> + ODP_AUTH_ALG_SHA256_128;
ODP_AUTH_ALG_SHA256_HMAC
> + } else {
> + entry->alg.u.auth = ODP_AUTH_ALG_NULL;
> + }
> + }
> + break;
--
With best wishes
Dmitry