[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