This book is going to show you the practical side of programming the 12xx series of Intel’s Internet eXchange network Processors (IXP). Much has been written about network processors in the last few years. Perhaps too much, because nowadays defining the term ‘network processor’ involves writ-ing a dissertation. So while network processor definitions are different, the motivations for using network processors are similar. Ostensibly, network processors enable you to add, through software, the latest-and-greatest net-work service while maintaining high packet throughput and low packet la-tency. Of course, since we are talking about services delivered via software, as opposed to through hardware such as Application Specific Integrated Cir-cuits (ASICs), we should be able to get these latest-and-greatest network ser-vices out faster, right? Well, in theory, maybe.
In practice, the time-to-market advantages provided by implementing a new network service in software on a network processor can be offset by the steep learning curve for programmers of the network processor. The new tools, languages, and programming environments used to help network proc-essors achieve their high performance can quickly humble even the most ex-perienced programmer. The IXP12xx processor is no exception.
The IXP12xx processor offers a wide range of programmability through hardware units and co-processors specifically tuned to network programming, in addition to a general-purpose core processor. Due to this specialization, the IXP12xx can provide flexible programmability without sacrificing performance as might be expected with general-purpose processors. At the same time, the new programming paradigm presented by the IXP12xx can be daunting. When first programming on the IXP12xx, accomplishing seemingly trivial tasks such as receiving or transmitting packets has been known to invoke an all-out engineer’s victory dance. This initial programming experience can be especially frustrating for programmers already well-versed in the standard write-debug-optimize programming methods. The languages, tools, and opti-mization techniques are all different from what you may be used to. Optimiz-ing code is less about finding ways to execute fewer lines of code and more about understanding ways to offload work to the hardware.