[ovs-dev] OFPAT10_VENDOR and ofp-actions.c
Raul Suarez Marin
raul.suarez.marin at gmail.com
Mon Feb 2 18:26:48 UTC 2015
Solved. I finally know how it works. Sorry for the inconvenience.
2015-02-02 17:04 GMT+01:00 Raul Suarez Marin <raul.suarez.marin at gmail.com>:
> Hello,
>
> I am looking at decode_openflow10_action function at lib/ofp-actions.c. I
> am trying to understand how the code is performed. I have been testing it,
> but still no clue.
>
> I provide, at the end, my "test code".
>
> My problem is that I have created a custom action with type = 0x000d, and
> I am trying to know why this action goes to the default part of the switch
> statement, and other actions "go nowhere". I can explain. From the
> controller, I create 3 rules (same rules for different ports) which
> contains SET_SRC_MAC (type 0x0004) and my custom action (0x000d). At the
> end, I provide the output of the test.
>
> I would also like to know, when does the #define OFPAT10_ACTION(ENUM,
> STRUCT, NAME) part occurs. It is after the return statement >.<"
>
> Thank you, and sorry if this question is too simple, but I don't get how
> it works.
>
> Thanks again,
> Raúl
>
> --------------------- CODE ------------------------------------
> // The real implementation does not have any file writing variable/function
>
> static enum ofperr
> decode_openflow10_action(const union ofp_action *a,
> enum ofputil_action_code *code)
> {
>
> FILE *f;
> f = fopen("/home/raul/file.txt", "ab+");
> fprintf(f, ">ALL< 0x%x 0x%x (%d %d) (0x%x %d) (0x%x %d)\n", a->type,
> a->header.len, a->type, a->header.len, OFPAT10_VENDOR,
> OFPAT10_VENDOR,CONSTANT_HTONS(OFPAT10_VENDOR),CONSTANT_HTONS(OFPAT10_VENDOR));
> fclose(f);
> switch (a->type) {
> case CONSTANT_HTONS(OFPAT10_VENDOR):
> f = fopen("/home/raul/file.txt", "ab+");
> fprintf(f, " >V< 0x%x 0x%x (%d %d) (0x%x %d) (0x%x %d)\n", a->type,
> a->header.len, a->type, a->header.len, OFPAT10_VENDOR,
> OFPAT10_VENDOR,CONSTANT_HTONS(OFPAT10_VENDOR),CONSTANT_HTONS(OFPAT10_VENDOR));
> fclose(f);
> return decode_nxast_action(a, code);
>
> #define OFPAT10_ACTION(ENUM, STRUCT, NAME) \
> case CONSTANT_HTONS(ENUM): \
> if (a->header.len == htons(sizeof(struct STRUCT))) { \
> *code = OFPUTIL_##ENUM; \
> return 0; \
> } else { \
> return OFPERR_OFPBAC_BAD_LEN; \
> } \
> break;
> #include "ofp-util.def"
> f = fopen("/home/raul/file.txt", "ab+");
> fprintf(f, " >WTF< 0x%x 0x%x (%d %d) (0x%x %d) (0x%x %d)\n", a->type,
> a->header.len, a->type, a->header.len, OFPAT10_VENDOR,
> OFPAT10_VENDOR,CONSTANT_HTONS(OFPAT10_VENDOR),CONSTANT_HTONS(OFPAT10_VENDOR));
> fclose(f);
>
> /*case (0x0d00): something with htons? RAUL SUAREZ MARIN
> *code = OFPUTIL_OFPAT10_SET_ESMC_SSM;
> return 0;*/
>
> default:
> f = fopen("/home/raul/file.txt", "ab+");
> fprintf(f, ">F< 0x%x 0x%x (%d %d) (0x%x %d) (0x%x %d)\n", a->type,
> a->header.len, a->type, a->header.len, OFPAT10_VENDOR,
> OFPAT10_VENDOR,CONSTANT_HTONS(OFPAT10_VENDOR),CONSTANT_HTONS(OFPAT10_VENDOR));
> fclose(f);
> return OFPERR_OFPBAC_BAD_TYPE;
> }
> }
>
> ---------------- OUTPUT OF THE TEST
> ----------------------------------------------
> V = Verified => works fine
> F = Failed
> ALL = Everything
>
> fprintf(f, ">F< 0x%x 0x%x (%d %d) (0x%x %d) (0x%x %d)\n", a->type,
> a->header.len, a->type, a->header.len, OFPAT10_VENDOR,
> OFPAT10_VENDOR,CONSTANT_HTONS(OFPAT10_VENDOR),CONSTANT_HTONS(OFPAT10_VENDOR));
>
> >ALL< 0x0 0x800 (0 2048) (0xffff 65535) (0xffff 65535)
> >ALL< 0x0 0x800 (0 2048) (0xffff 65535) (0xffff 65535)
> >ALL< 0x0 0x800 (0 2048) (0xffff 65535) (0xffff 65535)
> >ALL< 0x0 0x800 (0 2048) (0xffff 65535) (0xffff 65535)
> >ALL< 0x0 0x800 (0 2048) (0xffff 65535) (0xffff 65535)
> >ALL< 0x0 0x800 (0 2048) (0xffff 65535) (0xffff 65535)
> >ALL< 0x400 0x1000 (1024 4096) (0xffff 65535) (0xffff 65535)
> >ALL< 0xd00 0x800 (3328 2048) (0xffff 65535) (0xffff 65535)
> >F< 0xd00 0x800 (3328 2048) (0xffff 65535) (0xffff 65535) <------------
> clearly, 0x000d failed
> >ALL< 0x400 0x1000 (1024 4096) (0xffff 65535) (0xffff 65535) <------
> what happened to this, this dissapeared? Did not go neither to >V< nor >F<
> >ALL< 0xd00 0x800 (3328 2048) (0xffff 65535) (0xffff 65535)
> >F< 0xd00 0x800 (3328 2048) (0xffff 65535) (0xffff 65535)
> >ALL< 0x400 0x1000 (1024 4096) (0xffff 65535) (0xffff 65535)
> >ALL< 0xd00 0x800 (3328 2048) (0xffff 65535) (0xffff 65535)
> >F< 0xd00 0x800 (3328 2048) (0xffff 65535) (0xffff 65535)
> >ALL< 0x400 0x1000 (1024 4096) (0xffff 65535) (0xffff 65535)
> >ALL< 0xd00 0x800 (3328 2048) (0xffff 65535) (0xffff 65535)
> >F< 0xd00 0x800 (3328 2048) (0xffff 65535) (0xffff 65535)
> >ALL< 0x400 0x1000 (1024 4096) (0xffff 65535) (0xffff 65535)
> >ALL< 0xd00 0x800 (3328 2048) (0xffff 65535) (0xffff 65535)
> >F< 0xd00 0x800 (3328 2048) (0xffff 65535) (0xffff 65535)
> >ALL< 0x400 0x1000 (1024 4096) (0xffff 65535) (0xffff 65535)
> >ALL< 0xd00 0x800 (3328 2048) (0xffff 65535) (0xffff 65535)
> >F< 0xd00 0x800 (3328 2048) (0xffff 65535) (0xffff 65535)
>
More information about the dev
mailing list