[ixp1200] Inter-ME uCode communication

Abhijeet Joglekar abhijeet at cs.utah.edu
Tue Jul 22 03:21:49 EDT 2003


You do not have to use the DL_MESink[] macro to pass the packets
to other MEs. Note, that the macro hardcodes the ring to which it
is enqueuing, based on the output port. So if you want to store
packets in some intermediate queue (before sending them to the output
queue), you might have to write your own macro which generates ring
handles according to your application.

Typically, on the dequeueing side, you might have your own algorithm
for scheduling, for example, you could use Roundrobin or Priority Queing.
Thus it maybe makes more sense to do the dequeue operation inside
the RR block or PQ block instead of in the dispatch loop.

So the short answer is, yes, in general, you would have to write
your own macros to enqueue/dequeue depending on your application.

On 21 Jul 2003, Cyrus Hall wrote:

> I've finally gotten to the point in my code where I need to expand to
> multiple microengines.  I think I've figured out what changes are needed
> in ixconfig, but other things are now vexing me.
>
> In the count example, the dispatch loop either forwards a packet with
> DL_SASink[] or DL_MESink[].  From the documentation, it sounds like
> DL_MESink[] passes the current packet reference to the next control
> block (next microengine).  Just like DL_SASink[] has a inverse
> (DL_SASource[]), I would expect the the ME version to have one,
> something like DL_MESource[], yet no such macro exists.
>
> So what do must of you do?  Have you just written a DL_MESource, or do
> you use one of the many other ways to syncronize between engines (SRAM
> CAM locks, or some other test-set mechanism)?  I'm wondering which is
> the best way to go from here.
>
> Thanks,
> Cy
>




More information about the ixp1200 mailing list