vppapigen: do not allow to define message as both request and reply
[vpp.git] / src / tools / vppapigen / vppapigen.py
index 620b2ef..57e5e3a 100755 (executable)
@@ -345,6 +345,10 @@ class VPPAPIParser(object):
                              | RPC ID RETURNS ID ';'
                              | RPC ID RETURNS STREAM ID ';'
                              | RPC ID RETURNS ID EVENTS event_list ';' '''
+        if p[2] == p[4]:
+            # Verify that caller and reply differ
+            self._parse_error('Reply ID ({}) should not be equal to Caller ID'.format(p[2]),
+                              self._token_coord(p, 1))
         if len(p) == 8:
             p[0] = Service(p[2], p[4], p[6])
         elif len(p) == 7:
@@ -570,6 +574,7 @@ class VPPAPI(object):
 
         msgs = {d.name: d for d in s['defines']}
         svcs = {s.caller: s for s in s['services']}
+        replies = {s.reply: s for s in s['services']}
         seen_services = {}
 
         for service in svcs:
@@ -580,6 +585,9 @@ class VPPAPI(object):
                 raise ValueError('Service definition refers to unknown message'
                                  ' definition in reply: {}'
                                  .format(svcs[service].reply))
+            if service in replies:
+                raise ValueError('Service definition refers to message'
+                                 ' marked as reply: {}'.format(service))
             for event in svcs[service].events:
                 if event not in msgs:
                     raise ValueError('Service definition refers to unknown '