Those #defines seem to be intended to sort of undefine those symbols as preprocessor symbols right after potentially using the preprocessor symbols to define names in the enum.
Out of context, I'm failing to guess the intent.
The preprocessor acts as if it were executed before the rest of compilation, so the preprocessor does not care that the #define happens to land inside the body of the enum definition.
Edit: After using google, I have a better guess (mainly expanding on the answer that you seem to have gotten when asking the same question in a different forum):
Assuming there are many variants of rtnetlink.h floating around (for different OS's etc.) and some of those defined RTM_BASE by #define and some didn't define it at all, then user code depending on rtnetlink.h but wanting to be portable would include code such as
to see if RTM_BASE is defined. But then a version, such as you quoted, that defines it by enum would break such user code, so redundantly define it by #define (as itself) to allow that test.