We propose an efficient joint channel assignment and routing protocol (J-CAR) for multi-channel multi-interface mobile ad hoc networks (MANETs). Aiming at overcoming the limitations of the existing channel assignment and routing algorithms, J-CAR negotiates a channel at each active link during the route setup process. It has the following major features: a) a pre-determined common control channel is used by every node for routing and channel negotiation; b) control packets for data transmission (RTS, CTS & ACK) are carried by the associated data channels; c) the spare capacity on the control channel can be used for data transmission; d) an interface is free to change its working modes between send and receive; and e) an interface can tune to any data channels for data sending or receiving at the cost of switching overhead. With J-CAR, a more flexible assignment of interfaces, channels, and the working mode of each interface can be rendered. The performance gain brought by J-CAR is substantiated by extensive simulation results.