IPCP is used to negotiate a couple of IP parameters at link configuration time. Usually, each peer may send an IPCP Configuration Request packet, indicating which values it wants to change from the defaults, and to what value. Upon receipt, the remote end inspects each option in turn, and either acknowledges or rejects it.
pppd gives you a lot of control about which IPCP options it will try to negotiate. You can tune this through various command line options we will discuss below.