What things should one know in order to enjoy their undergraduate degree? From looking at undergraduate mathematics programmes it's quite apparent that mathematics degrees are demanding, one could even say the work load is grueling. 
However I'm certain that there are things that one could do to prepare in advance for the rigours of such a degree. What i'd like to know is what foundations must be in place so that the experience of learning mathematics at university is an enjoyable one. Enjoyable in the sense that if you're exposed to a new topic you aren't floundering and you can dive straight in and enjoy the exposition and the process of learning, without having to go backwards plugging in numerous gaps and addressing other deficiencies in your knowledge. 
I'm certain that a good grounding in pre-calculus mathematics and calculus are a prerequisite but aren't all that's needed.
What are the things that must one know in order to have a solid grounding in mathematics, with the aim of studying mathematics at a higher level?
Edit: Let's assume it's a quite a demanding degree programme: MIT, Harvard, Cambridge, etc.

Some skills you need to be familiar with:
1) Techniques of proofs: How should you think to prove a statement (induction, contrapositive, minimum counterexample etc), you can start with some proofs in number theory (a most excellent book):
2) Analysis: helps you make sense of numbers and continuity, you can then use sequences to decompose mathematical structures, baby Rudin is the most widely used introductory book in analysis.
3) Algebra (linear and abstract): Allows you to understand abstract mathematical structures. Hoffmann/Kunze for linear algebra.
Once you know have a basic understanding of these fields in mathematics you can be quite free to explore (Topology, Geometry, Number theory, etc)
Be curious! and Work hard! You'll find mathematics beautiful and rewarding!
